代码之家  ›  专栏  ›  技术社区  ›  Lars A. Brekken

回滚后的事务更改(NHibernate)

  •  6
  • Lars A. Brekken  · 技术社区  · 16 年前

    我有以下代码(为了讨论而简化)。我不明白的是为什么 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 Walschots的回答非常有帮助且准确。另外,我在 Nhibernate Documentation :

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

    1 回复  |  直到 8 年前
        1
  •  7
  •   David Walschots    7 年前

    来自行动中的NHibernate(夸特、哈里斯、鲍尔、金):

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

    最有可能的情况也是如此 Transaction.WasRolledBack 所有物