繁体   English   中英

EF6代码优先插入外键约束失败

[英]EF6 code-first insert foreign key constraint fail

在数据库中插入记录时,我遇到了使用EF6的怪异错误。

我在表Invoices中有一些记录,后来我想在表Lsvs添加一些记录。

我的对象Lsv必须具有发票,但发票不一定具有Lsv

这是我编写的代码(仅部分类):

public class Lsv
{
    public Guid InvoiceId { get; set; }
    public virtual Invoice Invoice { get; set; }
}

public class Invoice
{
    public virtual Lsv Lsv { get; set; }
}

并且在创建Lsv时:

var invoice = Domain.Query<Invoice>().FirstOrDefault(x => x.Id == invoiceId);

if (invoice == null)
{
    throw new EntityNotFoundException();
}

// Create the Lsv
var lsv = new Lsv
{
    Amount = invoice.TotalDue.Incl,
    BvrReference = invoice.BankIdentifier,
    InvoiceDueDate = invoice.DueDate,
    DebitorOrganizationNodeId = invoice.DebitorOrganizationNodeId,
    InvoiceId = invoice.Id,
    ContactId = invoice.ContactId,
    OrganizationNodeId = invoice.OrganizationNodeId
};

我100%确保发票存在于数据库中(调试时,我将获得ID来查询找到发票的数据库)。

然后在提交更改时出现异常

INSERT语句与FOREIGN KEY约束“ FK_dbo.Lsvs_dbo.Invoices_Id”冲突。 数据库“ Echino-Dev_StephM”的表“ dbo.Invoices”的列“ Id”中发生了冲突。

但是如果我这样做

var lsv = new Lsv
            {
                Amount = invoice.TotalDue.Incl,
                BvrReference = invoice.BankIdentifier,
                InvoiceDueDate = invoice.DueDate,
                DebitorOrganizationNodeId = invoice.DebitorOrganizationNodeId,
                InvoiceId = invoice.Id,
                Invoice = invoice,
                ContactId = invoice.ContactId,
                OrganizationNodeId = invoice.OrganizationNodeId
            };

注意,我设置了InvoiceId和Invoice-然后它可以工作,并且可以将数据插入数据库中。

有谁知道为什么在插入Lsv对象时仅设置InvoiceId字段会引发错误?

提前致谢

不要设置InvoiceId = invoice.Id。 原因是,在数据库中,引用是键,但是在C#中,引用是对象本身。 因此,如果您设置child.ParentId = Parent.Id是不够的(并且根本不需要),但是设置child.Parent = Parent可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM