回滚后的事务更改(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
属性