项目中应用了一个运用nHibernate的基类,调用nHibernate更简单,方便,基本不用掌握别的知识,只要会写HQL语句就行了!这里假设你nHibernate前面的ORM工作都已经完成.
using System;
using System.Collections.Generic;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using System.Reflection;
using System.Collections;

namespace eLogistics.Data.Domain


{
public abstract class BusinessObject

{

private region. Don't touch these codes#region private region. Don't touch these codes
private static ISessionFactory _sessionFactory;
private static readonly object _lockObj = new object();
public static ISessionFactory SessionFactory

{
get

{
if(_sessionFactory==null)

{
lock (_lockObj)

{
if (_sessionFactory == null) //Double check

{
Configuration config = new Configuration();
config.AddAssembly(Assembly.GetExecutingAssembly());
if (config != null)
_sessionFactory = config.BuildSessionFactory();
}
}
}
return _sessionFactory;
}
}

private enum ACTION
{
CREATE =0,
DELETE =1,
UPDATE =2
}
private Boolean DoDBAction(ACTION action)

{
ISession session = null;
ITransaction transaction = null;
Boolean bSucceed = false;

try
{
session = SessionFactory.OpenSession();
transaction = session.BeginTransaction();
if (action == ACTION.CREATE)

{
this.createDate = this.modifyDate = DateTime.Now;
session.Save(this);
}
else if (action == ACTION.DELETE)
session.Delete(this);
else

{
this.modifyDate = DateTime.Now;
session.Update(this);
}
transaction.Commit();
bSucceed = true;
}
catch (Exception)

{
if(transaction!=null) transaction.Rollback();
}
finally

{
if (session != null)
session.Close();
}
return bSucceed;
}
#endregion private region. Don't touch these codes

abstract public Int32 id
{get;set;}

abstract public DateTime createDate
{ get;set;}

abstract public DateTime modifyDate
{ get;set;}

public Boolean Create()

{
return DoDBAction(ACTION.CREATE);
}
public Boolean Delete()

{
return DoDBAction(ACTION.DELETE);
}
public Boolean Update()

{
return DoDBAction(ACTION.UPDATE);
}
public static Object Load(Type thetype,object ID)

{
ISession session = null;
Object obj=null;
try

{
session = SessionFactory.OpenSession();
obj = session.Load(thetype, ID);
}
catch (Exception)

{
}
finally

{
if(session!=null)
session.Close();
}
return obj;
}
public static IList Query(string hql)

{
ISession session = null;
IList list = null;
try

{
session= SessionFactory.OpenSession();
IQuery q = session.CreateQuery(hql);
list = q.List();
}
catch (Exception)

{
}
finally

{
if (session != null) session.Close();
}
return list;
}
public static IList QueryRange(string hql, int first, int count)

{
ISession session = null;
IList list = null;
try

{
session= SessionFactory.OpenSession();
IQuery q = session.CreateQuery(hql);
q.SetFirstResult( first);
q.SetMaxResults(count);
list = q.List();

}
catch (Exception)

{
}
finally

{
if (session != null) session.Close();
}
return list;
}
public static Object QueryGetFirst(string hql)

{
IList list = Query(hql);
if (list == null||list.Count==0)
return null;
return list[0];
}
}
}
