gpt4 book ai didi

c# - NHibernate - 嵌套的急切加载被忽略

转载 作者:太空宇宙 更新时间:2023-11-03 16:10:06 25 4
gpt4 key购买 nike

我正在尝试用嵌套集合急切地加载一个实体。如下:

父级 -> 子级 1 -> 孙级 -> 曾孙级

这是我的 4 次尝试之一(这是最有希望的):

Parent parent = null;
Child child = null;
GrandChild grandChild = null;
GreatGrandChild greatGreatChild = null;
var result = CurrentSession.QueryOver<Parend>(() => conj)
.Where(c => c.Id == id)
.JoinAlias(() => parent.Children, () => child)
.JoinAlias(() => child.GrandChild, () => grandChild)
.JoinAlias(() => grandChild.GreatGrandChildren , () => greatGrandChild)
.List<Parent>();

这会生成预期的 SQL,其中包含大量左外连接。由于联接,还返回了大约 800 个相同的父项。

但是,当我通过 for 循环中的代码访问第一个父级的列表时,数据库被命中无数次,完全忽略了之前的查询。

有什么想法吗?

信息:NHibernate 3.3;数据库:甲骨文; VS2012-ASP.NET

谢谢

最佳答案

它应该与这样的东西一起工作:

QueryOver<Parent>()
.Where(c => c.Id == id)
.Inner.JoinQueryOver(p => p.Children)
.Inner.JoinQueryOver(c => c.GrandChild)
.Inner.JoinQueryOver(g => g.GreatGrandChildren)
.Fetch(p => p.Children).Eager
.Fetch(p => p.Children.GrandChild).Eager
.Fetch(p => p.Children.GrandChild.GreatGrandChildren).Eager
.TransformUsing(Transformers.DistinctRootEntity)

Fetch.Eager 告诉 NH 在一个请求中加载那些嵌套的集合,TransformUsing 基本上告诉它你想要一个不同的 Parent

关于c# - NHibernate - 嵌套的急切加载被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17808955/

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