例外“实例未处于有效状态”

时间:2012-10-29 12:22:38

标签: nhibernate orm fluent-nhibernate nhibernate-mapping

这是一个示例代码。我在哪里做一些测试

  1. 获取实体
  2. 删除实体
  3. 回滚交易。
  4. 更改实体
  5. 刷新实体
  6. 获取实体
  7. 我在下面的代码中排除了这个异常:实例未处于有效状态

            ISession session = sessionFactory.OpenSession();
            var list1 = session.Query<Asset>().ToList();
    
            ITransaction transaction = session.BeginTransaction();
    
            session.Delete(list1[0]);
    
            transaction.Rollback();
            transaction.Dispose();
    
            list1[0].Name = "Test";
            session.Refresh(list1[0]);
            var list2 = session.Query<Asset>().ToList();
    

    如果我打电话刷新两次。它没有任何问题。它工作正常。

            try
            {
                session.Refresh(list1[0]);
            }
            catch (Exception)
            {
                session.Refresh(list1[0]);
            }
    

    请您告诉我您的观点和建议,这里有什么问题。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您处理回滚和异常。在回滚或异常之后,对象的内存中状态可能不再与其持久状态一致,因此会话在不进行任何清理的情况下不再安全使用。建议在异常之后,您应该回滚任何事务,然后丢弃会话,或使用session.Clear()清除它。这同样适用于回滚,你应该开始一个新的会话,或者清除它并丢弃所有现有的对象,否则不一致会带来很多麻烦。