【发布时间】:2009-06-17 14:54:28
【问题描述】:
我有以下代码(为了讨论而进行了简化)。我不明白为什么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
}
更新:
David Walschot 的回答非常有用且准确。另外,我在Nhibernate Documentation中发现了以下内容:
如果您回滚事务,您应该立即关闭并丢弃当前会话,以确保 NHibernate 的内部状态是一致的。”
【问题讨论】: