Nhibernate с Asp.net Веб-формы — сеанс для каждого запроса

#asp.net #nhibernate #orm

#asp.net #nhibernate #orm

Вопрос:

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

Меня беспокоит то, что, поскольку я открываю новый сеанс по запросу (и сохраняю его в HttpContext.Current.Элементы) он открывает сеанс для каждого запроса, даже запроса, включая запрос на файлы .css и изображения. Я вспоминаю, что читал, что создание сеанса — довольно легкая операция (хотя не знаю о транзакциях), но в любом случае кажется ненужным открывать сеанс для запросов на файл .css?

У кого-нибудь есть какие-то идеи по этому поводу, это проблема и / или я делаю что-то глупое?

Заранее спасибо

Комментарии:

1. вы имеете в виду HttpModule, а не HttpHandler, верно?

2. Вы, конечно, правы, ответ сейчас отредактирован. Спасибо

Ответ №1:

  • создавайте объект сеанса, только если тип файла .aspx или .ashx:

         switch (context.Request.CurrentExecutionFilePathExtension.ToLower())
        {
            case ".aspx":
            case ".ashx":
                context.Items[ContextKey] = CreateMySession();
                break;
        }
      
  • или инкапсулируйте создание сеанса внутри средства получения свойств, и очистка проверяет, является ли session != null

Комментарии:

1. Насколько дорого начинать транзакцию Nhib для каждого запроса (в aspx / ashx)? Могу ли я получать транзакцию для каждого запроса или я должен открывать их явно при необходимости?