我在每个请求的会话上下文中使用Nhibernate。 当我使用session.Update并提交或回滚我的事务时,我得到一个ObjectDisposedException。
此异常的堆栈跟踪是: 在NHibernate.Transaction.AdoTransaction.CheckNotDisposed() 在NHibernate.Transaction.AdoTransaction.Rollback() 在C:\ Projects \ MyProject \ ItemService.cs中的MyService.update(MyItem项):第121行 在MyController.Edit(Nullable`1 pageId,MyItem item,FormCollection集合)中的C:\ Projects \ MyProject \ ItemController.cs:第251行
在执行更新之前,事务包含以下属性: isActive:是的, wasCommitted:假的, wasRollBacked:false
执行更新操作后,属性具有以下值: isActive:false, wasCommitted:真实, wasRollBacked:false
为什么我会得到异常以及为什么布尔会在没有提交的情况下改变?
我使用以下代码执行此操作:
using (var tx = SessionManager.CurrentSession.BeginTransaction())
{
try
{
//perform update
wysiwygitemRepository.Update(item);
// perform an action that raises an exception (because of null value)
pageSettingService.SaveSettings(null, item.Id);
tx.Commit();
}
catch(Exception)
{
tx.Rollback();
}
}
我使用fluhmode.none作为flushmode,但也尝试了flushmode.auto
即使我将代码更改为以下内容,我仍然会遇到相同的异常:
using (var tx = SessionManager.CurrentSession.BeginTransaction())
{
try
{
//perform update
SessionManager.CurrentSession.Update(item);
tx.Commit();
}
catch(Exception)
{
tx.Rollback();
}
}
答案 0 :(得分:0)
我已经解决了这个问题。
我使用了一些导致问题的nhibernate拦截器。