How to properly use a NHibernate ISession object - Session Is Closed! errors

前端 未结 4 1716
伪装坚强ぢ
伪装坚强ぢ 2021-01-04 19:23

I\'m running into issues with my ISessions in NHibernate. I keep getting \"Session Closed!\" errors. Can some one please show me the correct pattern including a definition o

4条回答
  •  不知归路
    2021-01-04 19:51

    The issue lies in the fact the ISession is not thread-safe. There were multiple methods being fired on separate threads that all created an instance of ISession. The issue was really with the fact that they all shared the same SessionFactory. Image both of these methods are fired off on separate threads:

    ISessionFactory _sessionFactory;
    
    void MethodOne()
    {
       using(ISession session = _sessionFactory.OpenSession()) 
       {
           //Do something with really quick with the session
           //Then dispose of it
       }
    }
    
    void MethodTwo()
    {
       //OpenSession() actually returns the same instance used in the 
       //previous method that has already disposed of the object;
       using(ISession session = _sessionFactory.OpenSession()) 
       {
           //Do something with a session that has already been disposed
           //throws errors
    
       }
    }
    

    How I fixed it was basically ditching NHIbernate in these scenarios and called stored procs instead. I think it turned out to be more performant in my situation anyway.

提交回复
热议问题