【问题标题】:Session.Transaction changes after Rollback (NHibernate)回滚后的 Session.Transaction 更改 (NHibernate)
【发布时间】: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 的内部状态是一致的。”

【问题讨论】:

    标签: nhibernate transactions


    【解决方案1】:

    来自 NHibernate in Action(Kuaté、Harris、Bauer、King):

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

    Transaction.WasRolledBack 属性很可能同样如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多