1 post in this topic

Posted

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!

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  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.