Быстрая загрузка 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
,