回滚后的事务更改(NHibernate)

回滚后的事务更改(NHibernate),nhibernate,transactions,Nhibernate,Transactions,我有以下代码(为了讨论而简化)。我不明白的是为什么session.Transaction属性在回滚后返回不同的事务 例如,这意味着除非存储对第一个事务的引用并检查该事务的属性,否则属性Session.Transaction.wasrollledback的帮助不大 有人能提供一些见解吗 int transId = session.Transaction.GetHashCode(); using (var tx = session.BeginTransaction()) { Assert.A

我有以下代码(为了讨论而简化)。我不明白的是为什么
session.Transaction
属性在回滚后返回不同的事务

例如,这意味着除非存储对第一个事务的引用并检查该事务的属性,否则属性
Session.Transaction.wasrollledback
的帮助不大

有人能提供一些见解吗

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
}
更新:

David Walschots的回答非常有帮助且准确。此外,我还发现:

如果回滚事务,应立即关闭并放弃当前会话,以确保NHibernate的内部状态一致。”

来自行动中的NHibernate(Kuaté、Harris、Bauer、King):

提交事务后,NHibernate会话将替换它 新事务。这意味着您应该保留对 如果您认为以后需要它,您正在提交的事务。 如果需要调用transaction.wasCommitted,这是必需的。 session.Transaction.WasCommitted始终返回false

这很可能同样适用于
事务.wasrollledback
属性