FluentNHibernate Управление сессиями в ASP.NET
-
07-07-2019 - |
Вопрос
Новое в NHibernate (мой отказ от ответственности). Я наткнулся на похожую и интересную статью о MVC , однако я Мне более интересно узнать, каковы общие рекомендации по управлению сессиями NHibernate в стандартном веб-приложении.
Я сталкивался с Burrow проектом, но начинаю Поймите, что есть несколько разных направлений. Я знаю, что, вероятно, не в моих интересах создавать новую SessionFactory каждый раз, когда мне нужно прикоснуться к базе данных, поэтому мне интересно, что сообщество делает для управления сессиями. Ты используешь нору? Вы оборачиваете свою SessionFactory в одиночку?
Любое направление или понимание всегда приветствуется.
Решение
Чтобы ответить на ваш вопрос напрямую, ваш объект ISessionFactory
должен быть одноэлементным. Вы можете сделать это программно (то есть, обернув его в синглтон C #) или настроив его в контейнере IoC.
Что касается сессий, то Burrow выглядит хорошо, но преобладающий и самый простой шаблон для сессий в веб-приложениях - OpenSessionInView - поставляется из коробки с NHibernate 2.0.0. То есть ваш код доступа к данным вызывает ISessionFactory.GetCurrentSession ()
, а не ISessionFactory.OpenSession ()
. Затем вы определяете, как текущий сеанс фабрики управляется, указав реализацию ICurrentSessionContext
. NHibernate предоставляет два готовых для выравнивания сеанса с веб-запросом. В документации это называется «контекстные сессии».
Без сомнения, более сложное веб-приложение может потребовать более продолжительных разговоров со сложной отложенной загрузкой и т. д., но для стандартного веб-приложения достаточно контекстных сеансов NHibernate.
Другие советы
Я написал серию постов на эту тему, посвященных шаблонам доступа к данным NHibernate / Fluent NHibernate.
Первое, что я рекомендую, это абстрагироваться от взаимодействия с NHibernate.
Создание общий универсальный и расширяемый репозиторий NHiberate
Затем для обработки управления сеансами я реализовал «Сеанс для бизнес-беседы». шаблон, который вместо наличия сеанса NH существует в течение жизни одного запроса страницы, который является общим, он существует для серии событий, скажем, страницы, которая позволяет вам вносить кучу правок в форму, а затем в конце либо применять их все навсегда или отменить их.
Разговор за Бизнес транзакция с использованием PostSharp и IoC
Если бы я собирался написать этот пост сегодня, я бы больше не использовал PostSharp для обработки кода AOP (Aspect Orientated Programming) в моем проекте, я бы либо использовал Linfu.AOP или другой фреймворк для взаимодействия AOP.