EntityState.Modified不在Entity Code First中工作

时间:2016-05-27 17:06:25

标签: c# asp.net-mvc entity-framework dbcontext

我使用此代码更新表格中的一个字段。(使用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;

如果必须生成更新代码,那为什么不呢? 我该如何解决这个问题呢?

1 个答案:

答案 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();