Сеанс в поле зрения и TransactionScope - PullRequest
3 голосов
/ 21 декабря 2010

у нас есть приложение asp.net webforms, использующее NHibernate. Вот некоторые особенности:

  • Нам нужны распределенные транзакции, потому что мы пишем в базу данных, а также в очередь.
  • Поскольку это веб-приложение, мы используем рекомендованный шаблон Session-in-view. У нас есть HTTPModule, который открывает сеанс NHibernate для события BeginRequest и закрывает его для EndRequest.
  • Внутри потока запроса у нас есть несколько отдельных моментов, когда нам нужно выполнить транзакционную работу. Для этого мы используем TransactionScope.

Итак, в основном, что происходит (псевдокод):

using(var session = sessionFactory.CreateSession()){
  using(var tx1 = new TransactionScope(){
    //work work work
    tx1.Complete();
  }

  //other work

  using(var tx2 = new TransactionScope(){
    //work work work
    tx2.Complete();
  }
}

Однако сейчас мы попадаем в ситуацию, когда мы видим множество сбоев, связанных с подключением к базе данных. Некоторые исследования дали нам два предложения:

  • Использование транзакции NHibernate в пределах вашей транзакции
  • Создайте сеанс в вашей транзакции

Однако у нас есть два вопроса по поводу этих предложений:

  1. NHibernate не подключается автоматически в TransactionScope. Зачем нам нужно явно создавать транзакцию для NHibernate?
  2. Если мы должны создать наш сеанс в TransactionScope, как мы можем совместить это с шаблоном Session-in-view?

Ответы [ 2 ]

4 голосов
/ 21 декабря 2010
  • Вы должны использовать транзакции NH (session.BeginTransaction())
  • NH транзакции автоматически подключатся к TransactionScope
  • Вам не нужно создавать сеанс внутри TransactionScope.
0 голосов
/ 23 декабря 2010

Взгляните на ncommon framework , он демонстрирует метод использования NHibernate с TransactionScope с использованием концепции UnitOfWorkScope;это может быть руководство, которое вы ищете.

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