[英]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
列定义:
我正在尝试更新的记录:
查询检索到的值:
好的,我的类发票的构造函数似乎引起了问题。 我创建了一个默认的,它似乎解决了这个问题
public Invoice() { }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.