在数据库中插入记录时,我遇到了使用EF6的怪异错误。
我在“发票”表中有一些记录,后来我想在表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-然后它起作用了,我可以将数据插入数据库了。
有人知道为什么在插入InvoiceId
对象时仅设置Lsv
字段会引发错误吗?
预先感谢
答案 0 :(得分:0)
请勿设置InvoiceId = invoice.Id。 原因是,在数据库中,引用是键,但是在C#中,引用是对象本身。因此,如果设置child.ParentId = Parent.Id不够(并且根本不需要),但是设置child.Parent = Parent会很好。