这是一个示例代码。我在哪里做一些测试
我在下面的代码中排除了这个异常:实例未处于有效状态
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]);
}
请您告诉我您的观点和建议,这里有什么问题。
答案 0 :(得分:1)
我认为问题在于您处理回滚和异常。在回滚或异常之后,对象的内存中状态可能不再与其持久状态一致,因此会话在不进行任何清理的情况下不再安全使用。建议在异常之后,您应该回滚任何事务,然后丢弃会话,或使用session.Clear()清除它。这同样适用于回滚,你应该开始一个新的会话,或者清除它并丢弃所有现有的对象,否则不一致会带来很多麻烦。