查询nhibernate时,我看到了一些奇怪的行为
当我写这样的查询时
Repository.QueryOver<Entity>()
.Fetch(x => x.Child1).Eager
.Fetch(x => x.child2).Eager
它会急切地抓住child1和child2实体,但是child1和child2的孙子孙女并没有懒散地加载。我对如何实现这一点感到有点困惑。
在我的nhibernate映射中,它似乎对孙子的懒惰或渴望没有影响,我要求至少一些实体被急切加载以避免N + 1查询问题。
我也想知道如何在我的原始实体下急切地加载孙子实体。
感谢任何帮助或想法!
答案 0 :(得分:1)
我建议使用batch-fetching。正如here所讨论的,流利的语法是:
1)集合设置
HasMany<MyEntity>(x => x.Entities)
.BatchSize(100);
2) class 级别设置
public MyEntityMap()
{
Id(x => x....
...
BatchSize(100);
此设置应适用于每个集合和每个类。要用流利的方式做到这一点 - 我们可以使用 Conventions
- 详情请参阅here
'IClassConvention'
- 用于更改ClassMaps值。您无法使用此约定更改属性,集合等,只会更改Lazy
和BatchSize
等设置。