这是一个示例代码。我在哪里做一些测试
- 获取实体
- 删除实体
- 回滚事务。
- 改变实体
- 刷新实体
- 获取实体
我在执行以下代码时遇到此异常:实例未处于有效状态
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/