50% 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
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
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
- 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
- current sessions are tracked by CallContext.
You are responsible to bind and unbind an ISession
instance with static methods of class CurrentSessionContext.
- 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
- 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.
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.