我使用此代码更新表中的一个字段。(使用 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;
ef 必须生成更新代码,那为什么不生成呢? 我该怎么做才能解决这个问题?
最佳答案
终于找到问题所在了? 我的表中有一个必需的字符串字段,我发现我们需要在 Entity Framework 中填充引用类型字段,它不能为空或空格字符,但不需要正确的值,在这种情况下我们不能这样做使用 条目.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();
关于c# - EntityState.Modified 在实体代码优先中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488943/