急切地在 NHibernate 中加载 child 和 child-of-child 集合

Sim*_*mon 5 c# nhibernate linq-to-nhibernate eager-loading

NHibernate 试图加载一个小的数据层次结构时遇到了问题。我的域模型如下所示:

class GrandParent
{
    int ID{get;set;}
    IList<Parent> Parents {get; set;}
}

class Parent
{
    IList<Child> Children {get; set;}
}

class Child
{
}
Run Code Online (Sandbox Code Playgroud)

我想为给定的祖父母加载所有父母和孩子。这个 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!
Run Code Online (Sandbox Code Playgroud)

Grandparent.Parents 集合包含 4 个项目,其中 2 个是重复的。似乎 DistinctRootEntityResultTransformer 仅适用于 1 级深度的集合,因此根据每个父级拥有的 Child 对象的数量,重复了Parents 集合。

是否可以让 NH 只包含不同的父对象?

非常感谢。

mxm*_*ile 1

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