Ленивая загрузка включена по умолчанию.В основном, NHibernate реализует ленивую загрузку двумя способами.
- Ленивая загрузка коллекций
- Ленивая загрузка «односторонних» ссылок (многие-к-одному)
Коллекции просты и понятны.NHibernate использует свою собственную реализацию, если классы коллекции в любом случае реализованы с отложенной загрузкой.
Односторонние ссылки («нормальные» ассоциации) не так просты.Ленивая загрузка реализована в прокси.Прокси-класс - это класс, созданный во время выполнения, который наследуется от ссылочного класса.Вот почему все в указанном классе должно быть виртуальным.Прокси-сервер переопределяет каждого участника и обеспечивает загрузку данных при доступе к элементу извне.Проблема с прокси-сервером заключается в том, что, если вы ссылаетесь на базовый класс, вы получаете прокси-сервер из базового класса и не можете снизить его до реального класса.Поэтому будьте осторожны при использовании отложенной загрузки с унаследованными классами.
Ленивый режим включен по умолчанию, вам необходимо явно отключить его.Так что вам не нужно делать ничего особенного, чтобы получить ленивую загрузку.
Когда вы оптимизируете производительность, также рассмотрите возможность использования пакетной выборки.
для односторонних связей:
<class name="xx" batch-size="10">
и для коллекций:
<bag name="xx" .... batch-size="10">
значительно уменьшает проблему N + 1 (в этом примере в 10 раз).