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

998*_*823 3 c# asp.net entity-framework ef-code-first

我有一个非常奇怪的情况,特别是一个班级.将类添加到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.....
}
Run Code Online (Sandbox Code Playgroud)

将发票插入数据库的代码

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;
Run Code Online (Sandbox Code Playgroud)

补充说明

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

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

按照jwatts1980建议书

我更新了发票类以反映这一点

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

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

ReferentialConstraint中的依赖属性映射到存储生成的列.栏目:'invoice_id'

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

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

[ForeignKey("InvoiceId")]
public InvoiceCreditCardPayment InvoiceCreditCardPayment { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

jwa*_*980 5

此属性可能有所帮助

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