NHibernate Lazy Loading - После закрытия сессии - PullRequest
4 голосов
/ 22 декабря 2010

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

Например, у нас есть класс USER и связанный класс ROLE.Когда мы загружаем USER, мы также лениво загружаем связанный объект ROLE.Можем ли мы иметь классы USER и ROLE полностью загруженными и доступными после закрытия сеанса?

Возможна ли эта функциональность?

Ответы [ 3 ]

8 голосов
/ 22 декабря 2010

Краткий ответ: нет.Вы должны инициализировать все, что вам нужно после закрытия сеанса, прежде чем закрывать сеанс.Метод принудительной загрузки ленивого прокси (без его перечисления): NHibernateUtil.Initialize(USER.ROLES).

Длинный ответ ... вроде.Возможно «присоединить» объекты к новому сеансу, что позволяет инициализировать PersistentBags и другие прокси-серверы NH.Лучший способ использовать, учитывая, что вы знаете, что объект существует в БД, но не в вашем новом сеансе, и что вы еще не изменили его, это Session.Lock(USER, LockMode.None).Это будет связывать объект с новым сеансом, не сообщая NHibernate делать что-либо в отношении операций чтения или записи объекта.Если вы регулярно присоединяете объекты к новым сеансам, это признак того, что вы не оставляете сеансы открытыми достаточно долго.Например, нет проблем с открытием одного сеанса для каждой формы окна и сохранением его открытым до тех пор, пока форма открыта. ПРЕДОСТАВЛЯЕТСЯ закрыть его при закрытии окна.

0 голосов
/ 23 декабря 2010

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

0 голосов
/ 22 декабря 2010

Если вы имеете дело с отношением 1-1 (роль 0-1 на пользователя), то, возможно, самым простым вариантом было бы настроить его для быстрой загрузки, а не для отложенной загрузки. Ленивая загрузка действительно предназначена для 1- * родственников или объектов, которые являются особенно большими и редко необходимыми. NH отлично справляется с оптимизацией запросов, чтобы быстро включать данные в подобных сценариях.

...