Изменение начального поведения LazyLoad в NHibernate

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

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

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


person John_    schedule 22.12.2008    source источник


Ответы (2)


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

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

.SetFetchMode("Prices", FetchMode.Join)
person John_    schedule 31.12.2008

Если вы выполняете 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";
person Gary Joynes    schedule 18.02.2010