c# - Db.SaveChanges 在插入后不分配主键 ID - Code First Entity Framework

标签 c# asp.net entity-framework ef-code-first

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

相关文章:

c# - 在 Redis 中必须是具有公共(public)无参数构造函数的非抽象类型

c# - 如何拒绝恶意请求

c# - 关于如何更新 DOM 但使用隐藏代码检查数据的问题

c# - MembershipUser 和 Entity Framework 代码优先

c# - 编译器选择了错误的重载

c# - 使用 nameof 运算符而不是 CallerMemberNameAttribute 来通知 .NET 4.5.3 中的属性更改有什么好处吗?

asp.net - 如何在MVC Razor中处理空子实体

entity-framework - ASP.NET Web API 身份 Entity Framework 数据库优先模型

c# - WPF 在 EF 的实体值更改时自动绑定(bind)

c# - 如果我调用自己的类 "Vector"会引起问题吗?