Session.Transaction изменяется после отката (NHibernate) - PullRequest
6 голосов
/ 17 июня 2009

У меня есть следующий код (упрощенный для обсуждения). Я не понимаю, почему свойство session.Transaction возвращает другую транзакцию после отката.

Например, это означает, что свойство Session.Transaction.WasRolledBack не поможет, если я не сохраню ссылку на первую транзакцию и не проверю свойство этой транзакции.

Кто-нибудь может дать здесь некоторое представление?

int transId = session.Transaction.GetHashCode();

using (var tx = session.BeginTransaction())
{
   Assert.AreEqual(transId, tx.GetHashCode());

   tx.Rollback();

   Assert.AreEqual(transId, tx.GetHashCode());
   Assert.AreEqual(transId, session.Transaction.GetHashCode()); // Fails
}

Обновление:

Ответ Дэвида Уолшота очень полезен и точен. Кроме того, в документации Nhibernate я обнаружил следующее:

Если вы откатываете транзакцию, вы должны немедленно закрыть и отменить текущий сеанс, чтобы убедиться, что внутреннее состояние NHibernate соответствует. "

1 Ответ

7 голосов
/ 17 июня 2009

Из NHibernate в действии (Куате, Харрис, Бауэр, Кинг):

После совершения транзакции сеанс NHibernate заменяет его с новой транзакцией. Это означает, что вы должны сохранить ссылку на транзакция, которую вы совершаете, если считаете, что она понадобится вам позже. Это необходимо, если вам нужно вызвать транзакцию. WasCommited. session.Transaction.WasCommitted всегда возвращает false.

Скорее всего, то же самое относится к свойству Transaction.WasRolledBack.

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