應用程序組件: NHibernate 3.3 FluentNHibernate 1.3 我只在此刻使用Automapping(也許這就是問題)。NHibernate只保存對象的一部分
我是NHibernate的新手,所以這可能是一個簡單的問題。
這裏是基本結構(不是實際的類)。
class Family
{
public virtual Guid ID { get; set; }
public virtual IList<Person> Members { get; set; }
}
class Person
{
public virtual Guid ID { get; set; }
public virtual Family Family { get; set; }
public virtual string Name { get; set; }
}
我有一個人的「編輯」視圖,它將ID作爲參數。 Action然後通過ID加載Person對象並呈現視圖。
的問題是,當我再改變的東西,並張貼回來,Person
對象的Family
成員是空的,因此當它的保存,這個人不再有家庭:(
我嘗試添加一個「FAMILYID 「屬性,然後將它作爲視圖中的隱藏屬性,但是NHibernate存在一個問題(我可以發佈錯誤,如果這是錯誤的方式)。
我可以加載Person對象,當它被回發,然後只是複製一些信息,但這似乎是錯誤的...
任何幫助將不勝感激。
所以,如果我有說10-15引用不同的對象(「最好的朋友」是'公共虛者BestFriend'等),我需要加載它們中的每一個,只是爲了堅持一個對象?這似乎是矯枉過正。另一個問題是NHibernate(或者我使用的FluentNHibernate)似乎不允許我在類上同時擁有「Family」對象和「FamilyID」對象。 – Martin
是的,你需要加載所有的參考。您可以使用INNER JOIN在單個SQL查詢中執行此操作以優化性能。但顯然,實現這一目標的最佳方式是使用視圖模型,該視圖模型僅包含應該在視圖中編輯的屬性。然後在您的控制器動作中,您將在單個查詢中從數據庫加載整個Person模型,使用AutoMapper等工具從視圖模型更新域模型的屬性,並使用NHibernate保留您的域模型。 AutoMapper使這個場景非常簡單。 –
我來看一下AutoMapper,它的意思是1個額外的查詢來從數據庫中獲取對象,但我想這並不是那麼糟糕。 – Martin