0

在我的應用程序中,有很多情況下我必須更新數據庫中某個實體的單個屬性。在網上我讀過DynamicUpdate()應該改變功能NHibernate的行爲,所以它只能更新屬性= NULLFluent NHibernate中的DynamicUpdate不起作用

所以我寫了我這樣的映射:

public class Building 
{ 
    public virtual Guid Id { get; set; } 

    public virtual int ConstructionPhase { get; set; } 

    public virtual string Name { get; set; } 

    [some other properties] 
} 

public class BuildingMap : ClassMap<Building>, IMappedEntity 
    { 
     public BuildingMap() 
     { 
      DynamicUpdate(); 
      SelectBeforeUpdate(); 

      Id(x => x.Id); 
      Map(x => x.ConstructionPhase); 
      Map(x => x.Name); 
      [some other properties] 
     } 
    } 

但是,如果我嘗試更新實體並將name屬性留空,該名稱將在數據庫中刪除。

我是否需要以其他方式配置Fluent NHibernate,或者有什麼問題?

回答

4

DynamicUpdate()將指示NHibernate只保存屬性已更改因此加載對象,更改單個屬性和刷新會話將只會更新已更改的列。

更新:不用去數據庫使用HQL

var affectedRows = session.CreateQuery("UPDATE MyEntity SET SomeProperty=:newValue WHERE Id=:id") 
    .SetParameter("newValue", value) 
    .SetParameter("id", id) 
    .ExecuteUpdate(); 
+0

更新單一屬性,但我認爲功能NHibernate會忽略每個屬性等於空?如果用戶想更新一個屬性,表單只傳遞實體的id和屬性的新值給我的腳本。如果我不想從數據庫加載整個實體來更改這個單元,我該怎麼辦?屬性?如果我可以簡單地將實體發送到數據庫並保留一切不應該改變的空白,那就沒問題了。 – Christopher 2012-07-31 17:51:08