У меня есть следующий код (упрощенный для обсуждения). Я не понимаю, почему свойство 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 соответствует. "