У меня есть следующий код (упрощенный для обсуждения). Я не понимаю, почему свойство session.Transaction
возвращает другую транзакцию после откат.Сессионные изменения после возврата (NHibernate)
Например, это означает, что свойство 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
}
Update: ответ
Дэвида Walschots' является очень полезным и точным. Кроме того, я нашел следующее в Nhibernate Documentation:
Если вы откатить транзакцию вы должны немедленно закрыть и отменить текущую сессию, чтобы гарантировать, что внутреннее состояние NHibernate последовательно «