我遇到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 :(该示例假定祖父母有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级的集合,因此根据每个父级具有的子对象的数量,可以复制Parents集合。
是否可以让NH只包含不同的Parent对象?
非常感谢。
答案 0 :(得分:1)
如果您的映射设置为FetchType.Join,请尝试将其更改为FetchType.Select。