我有一个问题,NHibernate的尝试加载数据的一小层次。 我的域模型是这样的:
class GrandParent
{
int ID{get;set;}
IList<Parent> Parents {get; set;}
}
class Parent
{
IList<Child> Children {get; set;}
}
class Child
{
}
我想急于加载所有家长和孩子对于给定的祖父母。 这LINQ到NH查询创建正确的SQL并加载按预期的方式祖父母:(例子假定祖父母有2个父母谁各有2个孩子的对象 - 所以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级深,所以父母收集被复制取决于许多小孩如何对象,每个家长都有。
是否有可能获得NH仅包括不同的父对象?
非常感谢。