我有一个Nhibernate类库和一个引用它的Web App。我可以从Product表中获取数据并且很好,但是当我刷新它时,我收到了这个问题。请看下面的图片:
http://vi-vn.com/pubs/images/NhibernateWeb.jpg (死链接)
有没有办法纠正他的问题?
答案 0 :(得分:1)
您链接的错误消息图像向我表明您可能在关闭会话后尝试访问该会话。当尝试访问延迟加载的集合/引用时,通常会发生这种情况。例如:
class MyObject
{
public virtual IList<MyOtherObject> MyObjects { get; set; }
}
MyObject obj = session.Load<MyObject>(1);
// Some stuff happens, the session is explicitly closed or goes out of scope
// Later, obj is still tied to the (now closed) session but code tries to:
int count = obj.MyObjects.Count; // MyObjects is lazy-loaded, NHibernate tries to query
NHibernate发现MyObjects集合是延迟加载的,尚未初始化,因此它尝试通过与之关联的会话来查询集合。但是,该会话已经关闭,因此会抛出ObjectDisposedException
并说“会话已关闭!”
解决方案是预先加载您的集合,或者确保会话不会超出范围或在完成之前明确处理。