Где открыть и закрыть NHibernate ISession в веб-приложении (в частности, MVC)? - PullRequest
9 голосов
/ 10 ноября 2009

Это довольно фундаментальный вопрос при использовании NHibernate в веб-приложении, но я не вижу какой-либо согласованной наилучшей практики при поиске в Интернете. Я видел это сделано во многих разных местах:

Создано и размещено в методе Repository - Мне это просто кажется глупым, поскольку, когда вы получаете объект, он уже отсоединен.

В начале и в конце действия контроллера - Это кажется лучше, но раздражает необходимость делать это для каждого действия.

На уровне приложения, в global.asax beginrequest и endrequest - Это кажется лучшей идеей, но, опять же, я видел несколько примеров создания в Init вместо beginrequest (например, точная архитектура) хотя я не уверен почему.

Может быть, есть другие подходы?
Могут ли здесь помочь контейнеры IoC?
Может быть, вы знаете хороший ресурс в Интернете по этому поводу?
И - какой метод вы используете?

Спасибо

Ответы [ 2 ]

6 голосов
/ 10 ноября 2009

Сеанс на запрос , вероятно, наиболее часто используемый подход.

0 голосов
/ 11 ноября 2009

Я видел несколько примеров создания в Init вместо beginrequest (например, в острой архитектуре) - хотя я не уверен почему.

В IIS 7 Вы можете получить доступ к состоянию сеанса в событии Init Global.asax. Вот почему острая арка использует beginrequest.

Что касается управления сессиями, я с вами согласен - Global.asax - лучшее место для этого. Событие, если вы хотите иметь чистое разделение между слоями и удалить настройки DAL из пользовательского интерфейса, вы можете использовать HttpModule для него.

Также вы можете взглянуть на блог ayende . Это объясняет его способ управления сессиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...