2

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

  1. 获取实体
  2. 删除实体
  3. 回滚事务。
  4. 变更实体
  5. 刷新实体
  6. 获取实体

执行以下代码时出现此异常:实例未处于有效状态

        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]);
        }

您能否告诉我您对这里有什么问题的看法和建议。

4

1 回答 1

1

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

于 2013-09-10T04:32:39.070 回答