83% of people found this useful
Most applications using NHibernate need some form of "contextual"
sessions, where a given session is in effect throughout the scope of a given
context. However, across applications the definition of what constitutes a
context is typically different; and different contexts define different scopes
to the notion of current.
Starting with version 1.2, NHibernate added the ISessionFactory.GetCurrentSession() method. The processing
behind ISessionFactory.GetCurrentSession()
is pluggable. An extension interface (NHibernate.Context.ICurrentSessionContext)
and a new configuration parameter (current_session_context_class)
have been added to allow pluggability of the scope and context of defining
current sessions.
See the API documentation for the NHibernate.Context.ICurrentSessionContext
interface for a detailed discussion of its contract. It defines a single
method, CurrentSession(), by
which the implementation is responsible for tracking the current contextual
session. Out-of-the-box, NHibernate 2.0.0 comes with several implementations of
this interface:
-
NHibernate.Context.ManagedWebSessionContext
- current sessions are tracked by HttpContext.
However, you are responsible to bind and unbind an ISession instance with static methods on this class, it
never opens, flushes, or closes an ISession
itself.
-
NHibernate.Context.CallSessionContext
- current sessions are tracked by CallContext.
You are responsible to bind and unbind an ISession
instance with static methods of class CurrentSessionContext.
-
NHibernate.Context.ThreadStaticSessionContext
- current session is stored in a thread-static variable. This context only
supports one session factory. You are responsible to bind and unbind an ISession instance with static methods of
class CurrentSessionContext.
-
NHibernate.Context.WebSessionContext
- analogous to ManagedWebSessionContextabove, stores the current session in HttpContext.
You are responsible to bind and unbind an ISession instance with static methods of class CurrentSessionContext.
The current_session_context_class
configuration parameter defines which NHibernate.Context.ICurrentSessionContext
implementation should be used. Typically, the value of this parameter would
just name the implementation class to use (including the assembly name); for
the out-of-the-box implementations, however, there are corresponding short
names: "managed_web", "call", "thread_static",
and "web", respectively.