流利的Nhibernate加载不会减少延迟加载? (孙子实体)

时间:2015-12-07 16:56:41

标签: nhibernate fluent-nhibernate lazy-loading eager-loading fluent-nhibernate-mapping

查询nhibernate时,我看到了一些奇怪的行为

当我写这样的查询时

Repository.QueryOver<Entity>()
    .Fetch(x => x.Child1).Eager
    .Fetch(x => x.child2).Eager

它会急切地抓住child1和child2实体,但是child1和child2的孙子孙女并没有懒散地加载。我对如何实现这一点感到有点困惑。

在我的nhibernate映射中,它似乎对孙子的懒惰或渴望没有影响,我要求至少一些实体被急切加载以避免N + 1查询问题。

我也想知道如何在我的原始实体下急切地加载孙子实体。

感谢任何帮助或想法!

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 等设置。