Лучший способ управлять сеансом в NHibernate?

StackOverflow https://stackoverflow.com/questions/32612

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top