我在数据库中插入记录时遇到了一个奇怪的错误。
我在表格发票中有一些记录,稍后我想在表格中添加一些记录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,是不够的(也根本不需要),但设置子项。父级 = 父级将正常工作。