我使用此代码更新表格中的一个字段。(使用Entity Framework 6.1.3)
var model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow };
var dbSet = this.dbContext.Set<MyTable>();
dbSet.Attach(model);
entry = this.dbContext.Entry(model);
entry.State = EntityState.Modified;
this.dbContext.SaveChanges();
但这不起作用,UpdateTime不会改变。当我将代码更改为:
var model = this.dbContext.Set<MyTable>().Find(id);
model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow };
var dbSet = this.dbContext.Set<MyTable>();
entry = this.dbContext.Entry(model);
entry.State = EntityState.Modified;
this.dbContext.SaveChanges();
我发现在我的第一个代码中,EF看起来没有更改的UpdateTime字段,但在我写的时候这是正确的:
entry.State = EntityState.Modified;
如果必须生成更新代码,那为什么不呢? 我该如何解决这个问题呢?
答案 0 :(得分:2)
最后我发现了什么问题? 我在我的表中有一个必需的字符串字段,我发现我们需要在Entity框架中填充引用类型文件,并且它不能是空的或空白字符但不需要正确的值,并且在这种状态下我们必须不使用 entry.State = EntityState.Modified; 而不是它,我们必须使用 entry.Property(“UpdateTime”)。IsModified = true; 因此,这个问题可以通过这种方式解决:
var model = new MyTable { Id = Id, UpdateTime = DateTime.UtcNow , Title = "EveryThing" };
var dbSet = this.dbContext.Set<MyTable>();
dbSet.Attach(model);
entry = this.dbContext.Entry(model);
entry.Property("UpdateTime").IsModified = true;
this.dbContext.SaveChanges();