Динамическое управление ленивой загрузкой в NHibernate - CodeHelper

Динамическое управление ленивой загрузкой в NHibernate

1

Допустим, имеется объект, хранящий список других объектов. В базе эти связи реализованы как один-ко-многим или многие-ко-многим. В меппинге NHibernate указано, что коллекция загружается по требованию (lazy=true). Можно ли в конкретном методе получения сущностей из сессии управлять «ленивостью» загрузки? То есть, в некоторых случаях загружать с ленивой загрузкой, а в других получать весь граф объектов полностью?

Зачем это нужно: Объект класса A хранит ссылку на коллекцию объектов типа B. Когда в интерфейсе отображается список объектов A для предпросмотра, нужно чтобы дочерняя коллекция B не загружалась. Но, когда список объектов отображается в полном виде, нужно чтобы был загружен весь граф. Если просто для каждого объекта A обратиться к лениво-загружаемой коллекции B, то получим n+1 select. Как обойти эту проблему?

Новые ответы


1

NHibernate загружает весь граф, который получается в результате выполнения запроса. Поэтому, чтобы обойти lazy нужно вручную написать запрос и сделать join/fetch на соответствующее поле-коллекцию. Что-то типа этого (HQL):

from A a
    join a.ListOfB

v1.7.123.556
© 2009—2010 CodeHelper FAQ | О сайте | Обратная связь | История изменений | Статьи
Creative Commons LicenseМатериалы сайта распространяются под лицензией Creative Commons Attribution-Share Alike 3.0 Unported.