Открыть / закрыть сессию NHibernate - PullRequest
3 голосов
/ 16 сентября 2009

Используя FluentNHibernate в веб-приложении, я создал одноэлементный класс SessionFactory, который имеет следующие возможности:

SessionFactory.Instance //returns ISessionFactory

Является ли обычной / лучшей практикой открывать / закрывать сессии следующим образом?

using(ISession session = SessionFactory.Instance.OpenSession())
{
    using(ITransaction transaction = session.BeginTransaction())
    {
        //some operation
    }
}

Приведенный выше код будет жить в соответствующих классах хранилища для данной сущности.

Я заметил, что есть тема создания HttpModule для открытия сеанса при запуске и остановке приложения, но мне интересно, является ли это ситуативным или более распространенным.

UPDATE

Продолжая работу с HttpModule, у меня возникает похожая мысль:

С классом репозитория я в основном делаю следующее (config использует WebSessionContext):

using(ISession session = SessionFactory.Instance.GetCurrentSession())
{
    using(ITransaction transaction = session.BeginTransaction())
    {
        //some operation
    }
}

Ответы [ 2 ]

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

Если вы используете веб-приложение, я бы рекомендовал использовать HttpModule, чтобы открыть сеанс и закрыть его в цикле запросов. Фабрика сессий, которую я, вероятно, создаю в Application_Start.

Для объектов репозитория я передаю ему сеанс через конструктор.

Лично я не думаю, что объект репозитория имеет достаточно информации, чтобы решить, что делать с сеансом.

8 голосов
/ 17 сентября 2009

Я думаю, это будет зависеть от вашего разговора

  • сеанс на запрос
  • сеанс для каждого запроса с отсоединенными объектами
  • сеанс на разговор

для получения дополнительной информации об этом смотрите здесь

Вот несколько ссылок на реализации

обратите внимание, что сессия может быть введена в Doa / репозиторий.

для полной архитектуры взгляните на четкую архитектуру <это основано на лучших практиках, и я бы очень рекомендовал это </p>

Summer of Nhibernate ep 13, о сессиях с Asp.Net

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