Чтобы ответить на ваш вопрос напрямую, ваш ISessionFactory
объект должен быть одноэлементным. Вы можете сделать это программно (то есть, обернув его в синглтон C #) или настроив его в своем контейнере IoC.
Что касается сессий, Burrow выглядит хорошо, но преобладающий и самый простой шаблон для сессий в веб-приложениях - OpenSessionInView - поставляется из коробки с NHibernate 2.0.0. То есть ваш код доступа к данным вызывает ISessionFactory.GetCurrentSession()
, а не ISessionFactory.OpenSession()
. Затем вы указываете, как текущий сеанс фабрики управляется, указав реализацию ICurrentSessionContext
. NHibernate предоставляет два готовых для выравнивания сеанса с веб-запросом. В документации это называется «контекстными сеансами».
Без сомнения, более сложному веб-приложению может потребоваться более длительный разговор со сложной отложенной загрузкой и т. Д., Но для стандартного веб-приложения достаточно контекстных сеансов NHibernate.