Изменение исходного поведения LazyLoad в NHibernate - PullRequest
4 голосов
/ 23 декабря 2008

Я только начал использовать NHibernate и бегло-NHibernate, что я считаю великолепным. Я настраивал все свои сопоставления для использования LazyLoading для любых отношений между классами, потому что обычно я считаю, что нет необходимости загружать все заранее. Однако иногда вы знаете, что на 100% вы будете загружать все отношения или хотя бы одно отношение, и это сохранит дополнительные соединения, если вы получите данные заранее.

В любом случае, вы можете указать NHibernate загрузить данные отношения для отношения и переопределить начальную настройку?

Раньше я использовал LinqToSql, для этого я создавал репозитории, которые имели бы перегрузку того, какие элементы должны загружаться, в каких отношениях при необходимости. Это сработало очень хорошо, поэтому я хотел бы что-то подобное для NHibernate.

Ответы [ 2 ]

7 голосов
/ 31 декабря 2008

Я обнаружил, что это можно использовать с помощью функции загрузки LazyLoading / Eager запросов NHibernate.

Создайте свой ICriteria обычным способом, а затем имя ассоциации (свойство отношения, для меня это цены), а затем тип выборки, который можно объединить, выбрать, lazyload, eager

.SetFetchMode("Prices", FetchMode.Join)
0 голосов
/ 18 февраля 2010

Если вы выполняете HQL, вы можете использовать «выборку из левого внешнего соединения» или «выборку из левого соединения», чтобы присоединиться к ассоциации, которую вы хотите получить, а не загружать с отложенной загрузкой, например

Если у вас есть класс Building, у которого есть свойство, возвращающее объект Address, и это отношение загружено с отложенным доступом, у вас может быть HQL, подобный:

string hql = "from Building bld where bld.Type.Id = 1";

При обращении к свойству Address для каждого здания будет выполняться другой оператор SQL. Если изменить HQL на следующий, адреса будут извлечены как часть исходного оператора SQL:

string hql = "from Building bld left outer join fetch bld.Address as addr where bld.Type.Id = 1";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...