【发布时间】:2021-10-25 01:09:22
【问题描述】:
我正在尝试查询单个记录并更新一个值,但是当我调用 SaveChanges() 方法时,我得到了 DbUpdateConcurrencyException。
据我了解。调用异常是因为查询返回的记录主键为空,但在数据库中,记录确实有 ID。
为了您的信息,我使用 Guid 作为主键,它是在添加时生成的
我使用代码优先的方法来创建我的 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 列定义:
我要更新的记录:
查询检索到的值:
【问题讨论】: