NHibernate, отложенная загрузка и сеанс как синглтон

#nhibernate #lazy-loading

#nhibernate #отложенная загрузка

Вопрос:

Я новичок в Nhibernate. У меня есть приложение с отложенной загрузкой. Я хочу написать метод

 public User GetUser(int id)
  

в моем классе UserPersister.
Позже, в приложении, я хочу использовать какое-нибудь ссылочное свойство, например User.Роль или пользователь.Адрес.
Это не сработает, если я закрою сеанс, который я использовал для восстановления пользователя.
Моей первой идеей было создать синглтонный сеанс, и тогда я смогу получить все данные.
Я прочитал несколько статей о том, что это плохая идея из-за утечки производительности и памяти.
Это правда? Каково решение этой проблемы?

С уважением Мартин

Комментарии:

1. В основном это зависит от типа приложения, которое вы создаете. Это какое-то приложение WinForms / WPF или веб-приложение?

Ответ №1:

Взгляните на Effectus для простого подхода к WPF NHibernate.

Ответ №2:

Прежде всего помните, что NH session != sqlconnection. Наличие глобальной (одноэлементной) сессии обычно не является хорошей идеей даже в wpf, потому что рано или поздно вы можете перейти к многопоточному сценарию. Но я определенно не стал бы спорить против бессмыслицы производительности в вашем случае. Я бы посоветовал вам открыть его на максимально короткое время, чтобы завершить использование. Выполните анализ, в котором вы определяете варианты использования вашего приложения как «сеансы» с ограниченным сроком службы. Например, корзина для покупок. Вы начинаете и заканчиваете. Вы можете запустить сеанс до тех пор, пока не завершите такой вариант использования. Затем выбросьте это…