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

时间:2014-03-20 15:54:34

标签: 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.....
}

将发票插入数据库的代码

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推荐

我更新了发票类以反映此

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

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

  

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

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

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

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

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

1 个答案:

答案 0 :(得分:5)

此属性可能会有所帮助

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