#nhibernate #lazy-loading
#nhibernate #отложенная загрузка
Вопрос:
Я новичок в Nhibernate. У меня есть приложение с отложенной загрузкой. Я хочу написать метод
public User GetUser(int id)
в моем классе UserPersister.
Позже, в приложении, я хочу использовать какое-нибудь ссылочное свойство, например User.Роль или пользователь.Адрес.
Это не сработает, если я закрою сеанс, который я использовал для восстановления пользователя.
Моей первой идеей было создать синглтонный сеанс, и тогда я смогу получить все данные.
Я прочитал несколько статей о том, что это плохая идея из-за утечки производительности и памяти.
Это правда? Каково решение этой проблемы?
С уважением Мартин
Комментарии:
1. В основном это зависит от типа приложения, которое вы создаете. Это какое-то приложение WinForms / WPF или веб-приложение?
Ответ №1:
Взгляните на Effectus для простого подхода к WPF NHibernate.
Ответ №2:
Прежде всего помните, что NH session != sqlconnection. Наличие глобальной (одноэлементной) сессии обычно не является хорошей идеей даже в wpf, потому что рано или поздно вы можете перейти к многопоточному сценарию. Но я определенно не стал бы спорить против бессмыслицы производительности в вашем случае. Я бы посоветовал вам открыть его на максимально короткое время, чтобы завершить использование. Выполните анализ, в котором вы определяете варианты использования вашего приложения как «сеансы» с ограниченным сроком службы. Например, корзина для покупок. Вы начинаете и заканчиваете. Вы можете запустить сеанс до тех пор, пока не завершите такой вариант использования. Затем выбросьте это…