0

我想实现的只是更新Db中实体的特定属性。 (模仿像UPDATE Foo Set Status ='kool'WHERE ID = 99的东西)。如何在本例中强制EF更新Db中的一列?

我试试这个:

public void SetFooStatus(Foo foo) 
      { 

       var fooToUpdate = new Foo() 
       { 
        Id = foo.Id, 
        Status =foo.Status 
       }; 

       this.Context.Foos.Attach(fooToUpdate); 

       this.Context.Entry(fooToUpdate).Property("Status").IsModified = true; 

       this.Context.ValidateOnSaveEnabled = false; 

       this.dbSet.Attach(entityToUpdate); // This is IDbSet<Foo> 
       this.dbSet.Entry(entityToUpdate).State = EntityState.Modified; 

       this.dbSet.SaveChanges(); 

      } 

问题是,当我设置国EntityState.Modified,所有属性都被标记为Chagned -IsModified回报道道。

当我评论出来,然后更新没有完成 - 没有发生变化的Db。

问题: 如何强制EF更新foo对象的Status属性而不触及Db中的其他字段?

回答

0

EF不允许更新单个列。您可能需要从服务器获取它,而不是附加实体,这会将所有字段设置为服务器上的值,因此您不会更改其他属性。您可能想要使用DbSet.Find()方法,该方法将尝试通过上下文中的id找到实体,如果不存在,将从数据库中获取它。