Lar*_*ken 6 nhibernate transactions
我有以下代码(为了讨论而简化).我不明白的是为什么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
}
Run Code Online (Sandbox Code Playgroud)
更新:
David Walschots的回答非常有用且精确.另外,我在Nhibernate文档中找到了以下内容:
如果你回滚事务,你应该立即关闭并放弃当前会话,以确保NHibernate的内部状态是一致的."
来自NHibernate in Action(Kuaté,Harris,Bauer,King):
提交事务后,NHibernate会话将其替换为新事务.这意味着如果您认为以后需要它,您应该保留对您正在进行的交易的引用.如果您需要调用transaction.WasCommited,这是必要的.session.Transaction.WasCommitted始终返回false.
最有可能同样适用于该Transaction.WasRolledBack物业.
| 归档时间: |
|
| 查看次数: |
3490 次 |
| 最近记录: |