Быстрая загрузка Nhibernate, не возвращающаяся к отложенной загрузке? (внуки лица)

Запрашивая nhibernate, я вижу странное поведение

Когда я пишу запрос, как это

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

Он будет охотно захватывать объекты child1 и child2, но есть внуки для child1 и child2, которые не загружаются лениво. Я немного запутался в том, как этого добиться.

В моих отображениях nhibernate это, кажется, не влияет на лень или рвение внуков, и я требую, чтобы по крайней мере некоторые сущности были загружены с нетерпением, чтобы избежать проблемы запроса N+1.

Мне также интересно, как я мог охотно загружать сущности внуков под своей первоначальной сущностью.

Любая помощь или идеи приветствуются!

1 ответ

Я бы предложил использовать пакетную загрузку. Как обсуждено здесь, свободный синтаксис:

1) настройки сбора

HasMany<MyEntity>(x => x.Entities)
  .BatchSize(100);

2) настройка уровня класса

public MyEntityMap()
{
    Id(x => x....
    ...
    BatchSize(100);

Этот параметр должен применяться к каждой коллекции и каждому классу. Чтобы сделать это с беглым - мы можем использовать Conventions - увидеть больше, например, здесь

'IClassConvention' - Используйте для изменения ваших значений ClassMaps. Вы не можете изменять свойства, коллекции и т. Д. С этим соглашением, только изменять настройки, такие как Lazy а также BatchSize,