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 语句与外键约束"FK_dbo冲突。Lsvs_dbo。Invoices_Id"。冲突发生在数据库"Echino-Dev_StephM"中,表"dbo。发票","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
};

请注意,我设置了发票 ID 和发票 - 然后它可以工作,我可以将数据插入数据库。

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

提前致谢

不要设置 InvoiceId = invoice.Id。 原因是,在数据库中,引用是键,但在 C# 中,引用是对象本身。所以如果你设置孩子。ParentId = Parent.Id,是不够的(也根本不需要),但设置子项。父级 = 父级将正常工作。

最新更新