Как отключить автоматическую загрузку в NHibernate? - PullRequest
2 голосов
/ 06 июня 2009

Этот вопрос может быть дубликатом этого вопроса:

nhibernate - отключить автоматическую \ отложенную загрузку дочерних записей для одного-многих отношений

Я хотел бы знать, есть ли способ сказать nhibernate, чтобы он не загружал дочерние коллекции (лучше всего, если это с беглым Nhibernate), если я не делаю это вручную с запросом (сохраняя все сопоставления!).

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

1 Ответ

1 голос
/ 06 июня 2009

Как вы можете видеть из вопроса и ответа, который вы связали, вы можете как-то достичь этого, сделав отношения однонаправленными. Поэтому вместо прямого ответа как я собираюсь спросить почему в надежде найти лучшее "как".

Я определенно понимаю, почему вы не всегда хотите, чтобы коллекции извлекались с нетерпением, и именно поэтому NHibernate загружается лениво (и почему NHibernate всегда лениво загружает коллекции, если вы не выполняете предварительную выборку). NHibernate не будет получать эту коллекцию до тех пор, пока вы ее не попросите. Итак, мой вопрос , почему вы хотите, чтобы NHibernate не загружал коллекцию, когда вы над ней работали? Что вы хотите, чтобы NHibernate делал при доступе к дочерней коллекции на вашей сущности?

Обновление:

Вы действительно не ответили на мой вопрос, почему (может быть, я просто упрямый), но хорошо, вы хотите контроля. Ну, самый простой способ удержать NH от выполнения своей работы - это не сказать ему об этом в первую очередь (то есть не отображать это). То есть не отображайте конец «многих» (коллекций) отношений. Вы по-прежнему можете хранить коллекцию в своем классе, но если вы не сказали NHibernate заполнить ее, добавив в файл сопоставления, она никогда не будет. Затем вы можете добавить метод PopulateCollection где-нибудь, чтобы выполнить запрос NH и сохранить результаты в этой коллекции. Вы теряете всю приятную семантику, которую NHibernate предоставляет для коллекций, потому что он не может отслеживать изменения в ней; вам придется реализовать свои собственные методы Add и Remove.

Итак, в основном ответ Дэвида Кемпа на другой вопрос.

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