Вопрос

Новое в 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.

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