Search code examples
nhibernatecastle-activerecord

Session Management in Castle Active Record


How do I manage session if I am using Castle Active Record over nHibernate. Basically I can manage the life cycle of ISession on my own if I am using nHibernate directly. But when I am using Castle AR it does not give me a way to manage the life cycle of the session. I want to use single Session per thread.


I am using Castle AR in a WCF service and would like to use Session per WCF Request.


Solution

  • Instead of using ISession, in Castle ActiveRecord you want SessionScope:

    using(new SessionScope())
    {
      ; // do work here
    }
    

    If you need access to the ISession inside the SessionScope for some reason, you can do this:

    ISession dbSession = Castle.ActiveRecord.ActiveRecordMediator
          .GetSessionFactoryHolder().CreateSession(
              typeof(Castle.ActiveRecord.ActiveRecordBase));
    

    More documentation is here:

    http://www.castleproject.org/activerecord/documentation/trunk/usersguide/scopes.html#sess_scope

    and here:

    http://www.castleproject.org/activerecord/documentation/trunk/manual/scopes.html