gpt4 book ai didi

c# - 在 NHibernate 中急切加载子集合和子集合

转载 作者:行者123 更新时间:2023-11-30 12:53:52 24 4
gpt4 key购买 nike

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

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

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

class Child
{
}

我想为给定的 GrandParent 加载所有 parent 和 child 。此 Linq-to-NH 查询创建正确的 SQL 并按预期加载祖 parent :(该示例假设祖 parent 有 2 个 parent ,每个 parent 有 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 集合的复制取决于每个父级有多少个 Child 对象。

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

非常感谢。

最佳答案

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

关于c# - 在 NHibernate 中急切加载子集合和子集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1362794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com