我有一个类(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/