gpt4 book ai didi

c# - Db.SaveChanges 在插入后不分配主键 ID - Code First Entity Framework

转载 作者:行者123 更新时间:2023-11-30 14:56:34 25 4
gpt4 key购买 nike

我有一个类(class)的情况非常奇怪。将类添加到 DbContext 以插入数据库并调用 Db.SaveChanges code first/ef 不会将主键 ID 分配回类。

真的很奇怪,我以前从未遇到过这种情况,而且我似乎无法在网上找到任何解决方案。

这是当前代码的样子...

第一类发票代码

[Table("invoice")]
public class Invoice
{
[Key]
[Column("invoice_id")]
public int InvoiceId { get; set; }

[Column("invoice_credit_card_payment_id")]
public int InvoiceCreditCardPaymentId { get; set; }

[Column("batch_id")]
public int BatchId { get; set; }

[Column("customer_id")]
public int CustomerId { get; set; }

etc.....
}

将发票插入数据库的代码

var invoice = new Invoice()
{
BatchId = 0,
Memo = "",
PayDateTime = DateTime.Now,
QuickbooksAccountName = "",
QuickbooksId = "",
Terms = "",
etc....
};

DbContext.Current.Invoices.Add(invoice);
//Invoice record does insert successfully!
DbContext.Current.SaveChanges();

//This returns ZERO
var id = invoice.InvoiceId;

附加说明

作为旁注,发票记录已成功插入数据库,但是,ID 未分配回发票对象。

另一个注意事项 - 我有大约 30 个其他代码优先类在执行插入和获取 ID 时工作得很好 - 只是这个因为一些奇怪的原因给我带来了问题。

根据 jwatts1980 推荐

我更新了发票类别以反射(reflect)这一点

[Key]
[Column("invoice_id")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InvoiceId { get; set; }

这并没有立即解决问题,但确实在插入时显示了一个新错误:

A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'invoice_id'

我找到了一个 stackoverflow answer here这让我找到了我在发票类上设置的一些外键属性:

[ForeignKey("InvoiceId")]
public ICollection<InvoiceOrder> InvoiceOrders { get; set; }

[ForeignKey("InvoiceId")]
public InvoiceCreditCardPayment InvoiceCreditCardPayment { get; set; }

到目前为止,删除上面的 ForeignKey 属性似乎可以解决问题。我不能说它不会导致其他错误,但到目前为止一切似乎都运行良好。

最佳答案

这个属性可能有帮助

[Key]
[Column("invoice_id")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InvoiceId { get; set; }

关于c# - Db.SaveChanges 在插入后不分配主键 ID - Code First Entity Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22538394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com