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找到實體,如果不存在,將從數據庫中獲取它。