using System;
namespace Com.W3oa.Hibernate
{
/// <summary>
/// Summary description for HibernateUtil.
/// </summary>
public class HibernateUtil
{
[ThreadStatic]
private static NHibernate.ISession threadLocal;
private static NHibernate.ISessionFactory factory = null;
private static NHibernate.Cfg.Configuration configuration;
/// <summary>
/// 构造函数
/// </summary>
static HibernateUtil()
{
try
{
configuration = new NHibernate.Cfg.Configuration();
configuration.AddAssembly( System.Reflection.Assembly.GetExecutingAssembly());
factory = configuration.BuildSessionFactory();
}
catch(Exception ex)
{
throw new Exception("Could not create the NHibernate configuration", ex);
}
}
private HibernateUtil(){}
/// <summary>
/// 获取Session
/// </summary>
public static NHibernate.ISession GetSession()
{
NHibernate.ISession session = threadLocal;
if(session == null||!session.IsOpen)
{
try
{
session = (factory != null)?factory.OpenSession():null;
threadLocal = session;
}
catch(Exception ex)
{
throw new Exception("The session or database connection could not be created",ex);
}
}
return session;
}
/// <summary>
/// 关闭Session
/// </summary>
public static void CloseSession()
{
NHibernate.ISession session = (NHibernate.ISession)threadLocal;
threadLocal = null;
if (session != null)
{
session.Close();
}
}
/// <summary>
/// 获取SessionFactory
/// </summary>
/// <returns></returns>
public static NHibernate.ISessionFactory GetSessionFactory()
{
return factory;
}
}
}