我遇到了 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 对象?
非常感谢。