views:

242

answers:

2

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.

A: 

I assume you are working in a web app. Is that not the case?

There are a couple of ways to do it - Castle AR documentation

The simplest way is to the use SessionScopeWebModule to give a session per request.

Nebakanezer
I am working in web app but web apps delegates call to a WCF service where Castle AR is used. I would like to use Session per WCF Request?
Amitabh
+2  A: 

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

Michael Maddox