NHibernate避免N + 1与深层次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NHibernate避免N + 1与深层次相关的知识,希望对你有一定的参考价值。

我有以下对象:A - > B - > IList - > D - > IList等等。

如果我获取A的列表,NHibernate在B上进行内连接。那没关系。但是C取N + 1问题。

我试过这个:

var query = session.Query<A>()
    .Fetch(x => x.B)
    .ThenFetchMany(x => x.C)
    .Distinct();

但后来他做了117次,而不是之前的5次。例如,E现在没有急切加载。或者C是B的十倍而不是一次。

对于这种情况,最好的方法是什么?

提前致谢

答案

看看Ayende的文章Solving the Select N+1 Problem,开始使用NHibernate Profiler,它可以检测到N + 1问题Alert: Select N+1

以上是关于NHibernate避免N + 1与深层次的主要内容,如果未能解决你的问题,请参考以下文章

流利的NHibernate中的层次零对一关系

使用 Fluent NHibernate 将每个层次结构映射到现有数据库的表,没有鉴别器列

在 NHibernate 中定义多对多关系以允许删除但避免重复记录的正确方法是啥

EntityFramework 与 NHibernate 中的关系修复

Python的基本库与第三方库

如何向 ViewPager 提供许多片段并避免错误代码?