Jump to content



Photo
c# nhibernate session asp.net mvc

  • Please log in to reply
No replies to this topic

#1 WoF_Angel

WoF_Angel

    Resident One Post Wonder

  • Joined: 21-June 13

Posted 21 June 2013 - 11:51

Hello,

 

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 3.3.1.4
  • ASP.NET MVC2 / .net 3.5
  • IIS7
  • Visual studio 2010
public class NHibernateHelper
{


private static ISessionFactory _sessionFactory;

private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(EstoqueEquipamento).Assembly);
_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()))
CurrentSessionContext.Bind(NHibernateHelper.GetSessionFactory().OpenSession());

return NHibernateHelper.GetSessionFactory().GetCurrentSession();
}

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




public static void Commit()
{

GetCurrentSession().Transaction.Commit();


}

public static void EndSession()
{
DisposeCurrentSession();
}




}

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



public void SaveOrUpdate(T obj)
{
SessionForTransaction.SaveOrUpdate(obj);
}




public void Delete(T obj)
{



SessionForTransaction.Delete(obj);

}




}

//Global.asax
public class MvcApplication : System.Web.HttpApplication
{

protected void Application_BeginRequest(object sender, EventArgs args)
{

}



protected void Application_EndRequest(object sender, EventArgs args)
{

SessionManager.DisposeCurrentSession();

}

}




<!-- hibernate.cfg.xml --!>
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<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>

</session-factory>
</hibernate-configuration>


//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>
</generator>
</id>

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

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

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


</class>
</hibernate-mapping>

Thanks!






Click here to login or here to register to remove this ad, it's free!