Лучший способ управлять сессией в NHibernate? - PullRequest
5 голосов
/ 28 августа 2008

Я новичок в NHibernate (мой первый большой проект с ним).
Я использовал простой метод доступа к данным, создав объект ISession в блоке using, чтобы захватить мой объект или список объектов, и таким образом сеанс был разрушен после выхода из блока кода.

Однако это не работает в ситуации, когда требуется отложенная загрузка.
Например, если у меня есть объект Customer, у которого есть свойство, представляющее собой коллекцию Orders, то при попытке отложенной загрузки я получаю исключение Hibernate.
Кто-нибудь использует другой метод?

Ответы [ 4 ]

6 голосов
2 голосов
/ 28 августа 2008

Ознакомьтесь с веб-трансляциями SummerOfNHibernate , где вы найдете отличный учебник ... То, что вы ищете, в частности, не приходит до веб-сезона 5 или 6.

1 голос
/ 28 августа 2008

Держите сеанс открытым для всей вашей единицы работы. Если ваш сеанс слишком мал, вы не сможете воспользоваться кешем уровня сеанса (что важно). Каждый раз, когда вы можете предотвратить обратное обращение к базе данных, вы сэкономите много времени. Вы также не можете воспользоваться ленивой загрузкой, что важно понять.

Если продолжительность вашего сеанса слишком велика, вы можете столкнуться с другими проблемами.

Если это веб-приложение, вы, вероятно, хорошо справитесь с шаблоном session-per-httpRequest. По сути, это HttpModule, который открывает сеанс в начале запроса и сбрасывает / закрывает в конце. Обязательно сохраните сеанс в HttpContext.Items НЕ СТАТИЧЕСКОЕ ПЕРЕМЕННОЕ. <--- приводит ко всем видам проблем, с которыми вы не хотите иметь дело. </p>

Вы также можете посмотреть RhinoCommons за единицу выполнения работы.

0 голосов
/ 09 сентября 2008

Поскольку вы разрабатываете веб-приложение (предположительно с ASP.NET), ознакомьтесь с Советы NHibernate с ASP.NET в CodeProject.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...