我遇到了NHibernate嘗試加載小數據層次結構的問題。我的域模型看起來像:急於在NHibernate中加載子對象和子對象集合
class GrandParent
{
int ID{get;set;}
IList<Parent> Parents {get; set;}
}
class Parent
{
IList<Child> Children {get; set;}
}
class Child
{
}
我想爲所給的GrandParent加載所有父母和孩子。這個Linq-to-NH查詢創建了正確的SQL並按預期加載了GrandParent:(該示例假定祖父母有兩個父母,每個父母有兩個子對象 - 總共有4個子對象)。
var linq = session.Linq<GrandParent>();
linq.Expand("Parents");
linq.Expand("Parents.Children");
linq.QueryOptions.RegisterCustomAction(c =>
c.SetResultTransformer(new DistinctRootEntityResultTransformer()));
var grandparent = (select g from session.Linq<GrandParent>()
where g.ID == 1
select g).ToList();
Assert(grandparent.Count == 1); //Works
Assert(grandparent.Parents.Count == 2); //Fails - count = 4!
grandparent.Parents集合包含4個項目,其中2個是重複的。看起來DistinctRootEntityResultTransformer只能在1級深的集合上工作,所以Parents集合會被複制,具體取決於每個父級擁有多少個Child對象。
是否有可能讓NH只包含不同的父對象?
非常感謝。
你能解決這個問題嗎?這真的很煩人。 – 2010-03-28 10:10:29
是的 - 請參閱以下有關更改IList for ICollection並在映射中使用「set」的評論。 – Simon 2010-03-31 12:15:59