渴望在NHibernate中加载儿童和儿童collections品

我有一个NHibernate试图加载一个小的数据层次的问题。 我的域名模型如下:

class GrandParent { int ID{get;set;} IList Parents {get; set;} } class Parent { IList Children {get; set;} } class Child { } 

而且我想为所有父母和孩子加载一份特定的GrandParent。 此Linq-to-NH查询创建正确的SQL并按预期加载GrandParent :(该示例假定祖父母有2个父母,每个父母有2个子对象 – 总共4个子对象)。

 var linq = session.Linq(); linq.Expand("Parents"); linq.Expand("Parents.Children"); linq.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer())); var grandparent = (select g from session.Linq() 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集合。

是否有可能让NH只包含不同的Parent对象?

非常感谢。

如果您的映射设置为FetchType.Join,请尝试将其更改为FetchType.Select。