У меня была эта проблема, когда я начал внедрять текущую платформу.На самом деле, как предлагает Джейсон, вам нужно установить область действия сеанса NHibernate для каждого запроса.Это означает, что новый сеанс будет открыт для каждого запроса и закрыт в конце запроса.Тем не менее, вы создаете фабрику сеансов только один раз для каждого запуска приложения, так как это самая дорогая часть.
Используете ли вы какое-либо внедрение зависимостей?Вы можете найти замечательные примеры того, как достичь определения объема сеансов по запросу в Виндзорский замок NHibernate .
Однако, если вы делаете это вручную, вы можете открыть сеанс NHibernate в своем Global.asax Request_begin и убедитесь, что он закрыт и расположен в методе Request_End.
Удобный способ работы с NHIbernate:
- Castle Windsor (внедрение зависимостей)
- Репозиторийшаблон (разделить ваш доступ к данным)
- Единица работы шаблона.Вместо внедрения сеанса nhibernate вы вводите правильный сервис и единицу работы в сервисы
- Сервисный уровень (бизнес-логика) - то, что вы вызываете из своих контроллеров или уровня представления приложений