Sign in to follow this  

Is this the villain? My NHibernate session management in ASP.NET MVC2

Recommended Posts

WoF_Angel    0



I'm suspecting that the way i'm handling the session on my ASP.NET MVC2 application is causing me troubles (user alleged data loss). Is this truly a bad setup? And can you guys please tell me if such problem can arise from it?

  • Nhibernate version
  • ASP.NET MVC2 / .net 3.5
  • IIS7
  • Visual studio 2010
public class NHibernateHelper

private static ISessionFactory _sessionFactory;

private static ISessionFactory SessionFactory
if (_sessionFactory == null)
var configuration = new Configuration();
_sessionFactory = configuration.BuildSessionFactory();
return _sessionFactory;

public static ISession OpenSession()
return SessionFactory.OpenSession();

public static ISessionFactory GetSessionFactory()
return SessionFactory;


//Helper class used by the repositories and on App_BeginRequest
public class SessionManager

public static ISession GetCurrentSession()
if (!CurrentSessionContext.HasBind(NHibernateHelper.GetSessionFactory()))

return NHibernateHelper.GetSessionFactory().GetCurrentSession();

public static void DisposeCurrentSession()
ISession currentSession = CurrentSessionContext.Unbind(NHibernateHelper.GetSessionFactory());
if (currentSession != null)

public static void Commit()



public static void EndSession()


//Generic repository class to handle simple CRUD operations
public class GenericRepository<T> where T : class

public void SaveOrUpdate(T obj)

public void Delete(T obj)




public class MvcApplication : System.Web.HttpApplication

protected void Application_BeginRequest(object sender, EventArgs args)


protected void Application_EndRequest(object sender, EventArgs args)




<!-- hibernate.cfg.xml --!>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>

<property name="cache.use_second_level_cache">true</property>

<property name="connection.connection_string_name">ConexaoPRD</property>
<property name="current_session_context_class">web</property>
<property name="use_sql_comments">false</property>


//Sample mapping (simplified for readability's sake)
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="CMD.Business.BusinessEntity" namespace="CMD.Business.BusinessEntity.Entities">
<class name="OrdemServico" table="CEM.ORDEM_SERVICO" lazy="true" dynamic-update="true" dynamic-insert="true" where="ITEQ_SQ_ITEM_EQUIPAMENTO IS NULL">

<id name="Codigo" column="ORDS_SQ_ORDEM_SERVICO" type="Int32" unsaved-value="0">
<generator class="sequence">
<param name="sequence">CEM.SQ_ORDS_SQ_ORDEM_SERVICO</param>

<bag name="RealizacaoPlanoManutencaoList" inverse="true" generic="true" lazy="true" cascade="all">
<column name="ORDS_SQ_ORDEM_SERVICO"/>
<one-to-many class="RealizacaoPlanoManutencao" />

<many-to-one name="ItemEquipamentoCem" class="ItemEquipamentoCem">
<column name="ITEQ_SQ_ITEM_EQUIPAMENTO" />

<property name="NumeroOcorrencia" type="Int32" column="OCOR_NR_OCORRENCIA" />
<property name="CodigoColuna" type="String" column="COLU_CD_COLUNA" />



Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.