![](/img/trans.png)
[英]EF Code First The INSERT statement conflicted with the FOREIGN KEY constraint
[英]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.