5

我遇到了 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 级深度的集合,因此 Parent 集合的复制取决于每个父对象有多少子对象。

是否可以让 NH 仅包含不同的 Parent 对象?

非常感谢。

4

1 回答 1

1

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

于 2009-09-08T20:47:30.953 回答