Do NOT hold static session in nhibernate

Refer to http://www.cnblogs.com/netgarden/archive/2006/11/23/570129.html

Every data access strategy after server-side cursors has had as a goal minimizing the length of time an application holds open a connection, and NHibernate is no different. Therefore, having a static Session sitting around open and available is a poor strategy.

Instead, you can use disconnected Sessions. You can still create a shared Session object (either instance-available or truly static) for use in your methods. However, instead of leaving it open, or closing it in every method, you can follow the following pattern:

public IList getClasses(){

IList classes = null;

try{

  // session is declared in instance scope

  session.Reconnect();

  ITransaction tx = session.BeginTransaction();

  classes = session.CreateCriteria(

  typeof(UniversityClass)).List();

}

catch (Exception ex){

  // handle exception

}

finally{

  session.Flush();

  session.Disconnect();

}

return classes;

}

你可能感兴趣的:(Hibernate)