2009-09-15 11 views
3

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

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

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

ответ

5

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

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

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

2

Я написал серию сообщений в блогах по этой теме, касающихся NHibernate/Fluent NHibernate Data Access.

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

Creating a common generic and extensible NHiberate Repository

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

Conversation Per Business Transaction using PostSharp and IoC

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

+0

«Создание общего родового и расширяемого хранилища NHiberate» было отличным чтением. –

+0

Я ценю обратную связь, спасибо Бен! –