我从NHibernate得到了folloinwg错误:
System.ObjectDisposedException: Session is closed! Object name: 'ISession'.
at NHibernate.Impl.AbstractSessionImpl.ErrorIfClosed()
at NHibernate.Impl.AbstractSessionImpl.CheckAndUpdateSessionStatus()
at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.Save(Object obj)
我在.net windows服务中使用NHibernate。
我无法追踪异常的精确问题。这种例外经常发生
任何人都可以帮我解决这个问题吗?
NRK
答案 0 :(得分:6)
我猜你是不止一次将你的会话包装在一个using构造中,如下所示。你能发布一些会话使用代码吗?
HTH,
Berryl
错误 - 会话在第一次使用构造后关闭:
using(var session = _sessionFactory.GetCurrentSession()
using(var tx = _session.BeginTransaction(){
... do something
tx.Commit();
}
using(var session = _sessionFactory.GetCurrentSession()
using(var tx = _session.BeginTransaction(){
... do something else
}
更好 - 会话在工作完成后关闭
var session = _sessionFactory.GetCurrentSession();
using(var tx = _session.BeginTransaction(){
... do something
tx.Commit();
}
using(var tx = _session.BeginTransaction(){
... do something else
tx.Commit()
}
session.Close()
答案 1 :(得分:2)
正如错误所示 - 当您的ISession关闭时,您似乎正在尝试保存对象。你确定要打开吗?或者它可能过早关闭了?
更新: 你检查过NHibernate Logs了吗?
答案 2 :(得分:0)
我们遇到了同样的问题。将App Pool Managed Pipeline更改为Classic为我们解决了这个问题。