繁体   English   中英

使用 EF 查询记录返回空 GUID 主键,而它不是

[英]Querying a record with EF returns a null GUID primary key while it's not

我正在尝试查询单个记录并更新一个值,但是当我调用SaveChanges()方法时,我得到了DbUpdateConcurrencyException

据我了解。 调用异常是因为查询返回的记录有一个空的主键,但在数据库中,该记录确实有一个 ID。

为了您的信息,我使用Guid作为主键,它是在 Add 上生成的

我使用代码优先的方法来创建我的 SQL Server 数据库。

任何想法可能导致这种情况?

更新:在进一步调试之后,似乎我的 Invoice 对象是通过使用错误的构造函数(我为其他东西实现了它)添加了一个公共Invoice() 似乎阻止它通过另一个构造函数,但Id值是空的(其他字段设置正确)

这是我的实现的简化版本:

Invoice

public class Invoice
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Id { get; set; }
    
    public string InvoiceNumber { get; set; }

    ...

    public Invoice (Guid owner, Guid id, string fileName, long fileSize)
    {
        Owner = owner;
        FileId = id;
        FileName = fileName;
        FileSize = fileSize;
    }
}

OnModelCreating

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Invoice>(entity =>
    {
        entity.Property(e => e.Id)
            .ValueGeneratedOnAdd();

        entity.Property(e => e.InvoiceNumber);
    });

    OnModelCreatingPartial(modelBuilder);
}

记录更新

using (var db = new TheCompanyDbContext())
{
    Invoice invoice = db.Invoices.Where(x => x.ShouldBeExtracted == true).FirstOrDefault();

    if (invoice != null)
    {
        invoice.InvoiceNumber = "does this work";
        db.SaveChanges();
    }
}

我在数据库中的Id列定义:

id 列定义

我正在尝试更新的记录:

记录更新

查询检索到的值:

查询值

好的,我的类发票的构造函数似乎引起了问题。 我创建了一个默认的,它似乎解决了这个问题

public Invoice() { }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM