Ассоциация в Nhibernate с ленивым правда - PullRequest
1 голос
/ 16 июля 2010

Я работаю в проекте, который работает с N Hibernate.Из-за проблем с производительностью и усложнения проекта нам нужно вручную связать наш код. Как мы все знаем, нам нужно установить свойство lazy true.Что я хочу знать, так это их любой способ сделать связь с установленным ленивым свойством true. Мы уже создали наши собственные методы для заполнения Association. Но для этого также нам нужно написать много запросов и код, который не является удовлетворительным.

Пожалуйста, дайте мне знать, как это сделать.Благодарю.

1 Ответ

6 голосов
/ 16 июля 2010

Ленивая загрузка включена по умолчанию.В основном, NHibernate реализует ленивую загрузку двумя способами.

  1. Ленивая загрузка коллекций
  2. Ленивая загрузка «односторонних» ссылок (многие-к-одному)

Коллекции просты и понятны.NHibernate использует свою собственную реализацию, если классы коллекции в любом случае реализованы с отложенной загрузкой.

Односторонние ссылки («нормальные» ассоциации) не так просты.Ленивая загрузка реализована в прокси.Прокси-класс - это класс, созданный во время выполнения, который наследуется от ссылочного класса.Вот почему все в указанном классе должно быть виртуальным.Прокси-сервер переопределяет каждого участника и обеспечивает загрузку данных при доступе к элементу извне.Проблема с прокси-сервером заключается в том, что, если вы ссылаетесь на базовый класс, вы получаете прокси-сервер из базового класса и не можете снизить его до реального класса.Поэтому будьте осторожны при использовании отложенной загрузки с унаследованными классами.

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

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

для односторонних связей:

<class name="xx" batch-size="10"> 

и для коллекций:

<bag name="xx" .... batch-size="10">

значительно уменьшает проблему N + 1 (в этом примере в 10 раз).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...