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
属性似乎解决了问题。我不能说它不会引起其他错误,但是到目前为止一切似乎都很好。
此属性可能有帮助
[Key]
[Column("invoice_id")]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int InvoiceId { get; set; }