Db.SaveChanges在插入代码优先实体框架后不分配主键ID

本文关键字:分配 ID 框架 实体 SaveChanges 插入 代码 Db | 更新日期: 2023-09-27 17:51:14

我有一个非常奇怪的情况,特别是一个类。在将类添加到DbContext并插入到数据库中并首先调用Db.SaveChanges代码时,/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;
<<p> 其他说明/strong>

作为旁注,发票记录被成功插入到数据库中,但是,ID没有分配回发票对象。

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

Per jwatts1980 Recommendation

我更新了invoice类来反映这个

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

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

ReferentialConstraint中的依赖属性映射到存储生成的列。专栏:"invoice_id"

我在这里找到了一个stackoverflow答案,这使我找到了我在invoice类上设置的一些外键属性:

[ForeignKey("InvoiceId")]
public ICollection<InvoiceOrder> InvoiceOrders { get; set; }
[ForeignKey("InvoiceId")]
public InvoiceCreditCardPayment InvoiceCreditCardPayment { get; set; }
到目前为止,删除上述ForeignKey属性似乎解决了问题。我不能说它不会引起其他错误,但是到目前为止一切似乎都很好。

Db.SaveChanges在插入代码优先实体框架后不分配主键ID

此属性可能有帮助

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