FluentNHibernate Управление сессиями в ASP.NET - PullRequest
3 голосов
/ 15 сентября 2009

Новое в NHibernate (мой отказ от ответственности). Я наткнулся на похожую и интересную статью , касающуюся MVC , однако мне более любопытно узнать, каковы общие рекомендации по управлению сессиями NHibernate в стандартном веб-приложении.

Я сталкивался с проектом Burrow , но начинаю понимать, что, кажется, есть несколько разных направлений. Я знаю, что, вероятно, не в моих интересах создавать новую SessionFactory каждый раз, когда мне нужно прикоснуться к базе данных, поэтому мне интересно, что сообщество делает для управления сессиями. Ты используешь нору? Вы упаковываете свой SessionFactory в синглтон?

Любое направление или понимание всегда высоко ценится.

Ответы [ 2 ]

5 голосов
/ 16 сентября 2009

Чтобы ответить на ваш вопрос напрямую, ваш ISessionFactory объект должен быть одноэлементным. Вы можете сделать это программно (то есть, обернув его в синглтон C #) или настроив его в своем контейнере IoC.

Что касается сессий, Burrow выглядит хорошо, но преобладающий и самый простой шаблон для сессий в веб-приложениях - OpenSessionInView - поставляется из коробки с NHibernate 2.0.0. То есть ваш код доступа к данным вызывает ISessionFactory.GetCurrentSession(), а не ISessionFactory.OpenSession(). Затем вы указываете, как текущий сеанс фабрики управляется, указав реализацию ICurrentSessionContext. NHibernate предоставляет два готовых для выравнивания сеанса с веб-запросом. В документации это называется «контекстными сеансами».

Без сомнения, более сложному веб-приложению может потребоваться более длительный разговор со сложной отложенной загрузкой и т. Д., Но для стандартного веб-приложения достаточно контекстных сеансов NHibernate.

2 голосов
/ 15 сентября 2009

Я написал серию постов на эту тему в блогах, посвященных шаблонам доступа к данным NHibernate / Fluent NHibernate.

Первое, что я рекомендую, это абстрагироваться от взаимодействия NHibernate.

Создание общего универсального и расширяемого репозитория NHiberate

Затем для обработки управления сеансом я реализовал шаблон «Сеанс для делового разговора», который вместо того, чтобы иметь сеанс NH, существует в течение жизни запроса одной страницы, которыйэто обычное явление для ряда событий, например, страницы, которая позволяет вам внести несколько изменений в форму, а затем в конце либо применить их все навсегда, либо отменить их.

Разговор наБизнес-транзакция с использованием PostSharp и IoC

Если бы я собирался написать этот пост сегодня, я бы не стал снова использовать PostSharp для обработки кода AOP (Aspect Orientated Programming) в своем проекте, который я бы использовал Linfu.AOP или другой фреймворк для взаимодействия AOP.

...