【发布时间】:2012-10-29 12:22:38
【问题描述】:
这是一个示例代码。我在哪里做一些测试
- 获取实体
- 删除实体
- 回滚事务。
- 更改实体
- 刷新实体
- 获取实体
我在执行以下代码时遇到此异常:实例未处于有效状态
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]);
}
能否请您告诉我您对这里有什么问题的看法和建议。
【问题讨论】:
-
您应该将初始对象查询
var list1 = session.Query<Asset>().ToList();移动到事务内部。此外,您应该使用Using语句来处理事务范围,并且在结束之前不要提交/回滚。 -
感谢 Origin 提供您的建议,但它不起作用。
-
你能根据 Origins 的建议发布你的新代码吗?
-
我做了修改,ISession session = sessionFactory.OpenSession(); var list1 = session.Query
().ToList();使用 (ITransaction transaction = session.BeginTransaction()) { session.Delete(list1[0]); list1[0].Name = "测试"; } var list2 = session.Query ().ToList();
标签: nhibernate orm fluent-nhibernate nhibernate-mapping