nhibernate - 异常 "instance was not in a valid state"

标签 nhibernate orm fluent-nhibernate nhibernate-mapping

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

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

能否请您谈谈您的看法和建议,这里有什么问题。

最佳答案

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

关于nhibernate - 异常 "instance was not in a valid state",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13121553/

相关文章:

c# - Fluent Nhibernate - 选择特定列并使用 group by 计数查询

php - Symfony3 : How to set multiple connections?

c# - 这个ORM有什么问题吗?

nhibernate - LINQ-to-NHibernate 中不区分大小写的Where 子句如何与Oracle 提供程序一起使用?

nhibernate - 在字符串属性上搜索不等式

nhibernate - session 位于哪里?在客户端浏览器还是在服务器端?以及为什么在休眠中使用它?

c# - NHibernate 尝试在不存在的列中查询

django - 有什么办法可以将其转换为 django orm 吗?

nhibernate - 如何使用 Fluent NHibernate 映射实体 -> 接口(interface)关系?

c# - 流利的 Nhibernate,挣扎于一对多关系