最近在做一个短信项目,采用的nhibernate+sqlserver。因为数据量大,所以采用多线程的方式。有时会触发超时。当超时时事务再回滚也会触发异常nhibernate Transaction not connected, or was disconnected,所以在回滚时再加一个trycatch语句,当然这不是最好的解决方法,需日后完善。代码如下 :
public IList GetEntities(string strHQL)
{
IList lst;
ISession session=null;
ITransaction transaction=null;
try
{
session= SessionFactory.OpenSession(_AssemblyName);
transaction= session.BeginTransaction();
lst = session.CreateQuery(strHQL).List();
transaction.Commit();
//session.Close();
return lst;
}
catch (Exception e)
{
//bool b = transaction.WasRolledBack;
//if(!session.IsConnected||!session.IsOpen)
//{
// session.Reconnect();
//}
//if (session!=null&&session.Connection.State!=ConnectionState&&transaction != null && transaction.IsActive)
// transaction.Rollback();
//bool b = session.IsConnected;
//bool b1 = session.IsOpen;
try
{
if ( transaction != null && transaction.IsActive)
transaction.Rollback();
}
catch (Exception e1)
{
// throw;
}
return null;
}
finally
{
if(session!=null)
session.Close();
}
}