【发布时间】:2019-07-19 12:07:50
【问题描述】:
在数据库中插入记录时,我遇到了一个使用 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 字段会引发错误?
提前致谢
【问题讨论】:
标签: c# entity-framework-6