1.上篇文章说到的配置好nhibernate后,测试好连接http://blog.csdn.net/wuma0q1an/article/details/50898000
获得这两个东西后,就可以实现延迟加载的方式查询数据库了
ISession session = factory.OpenSession();
ITransaction trans = session.BeginTransaction();
2.查找方法如下,getEntityFromId是通过查找主键的方法(唯一)找到该实体,下面是以一个userinfo的表来实现,其CreateQuery(“ ”).List<object>()是获取IList的
public userinfo getEntityFromId(string id,ISession session)
{
string sql = string.Format("from userinfo where userid='{0}'", id);
IList<object> list = session.CreateQuery(sql).List<object>();
userinfo ui = null;
foreach(object ob in list)
{
ui = (userinfo)ob;
}
return ui;
}
获取到IList<object>后可以转成dataSet,可以看我另外一篇文章
http://blog.csdn.net/wuma0q1an/article/details/50893935
3.增加方法如下,切记要 trans.Commit(); session.Flush();才是将数据提交到数据库,session.Save(object)只是实现了保存缓存操作
public void insertEntity(userinfo ui,ISession session)
{
ITransaction trans = session.BeginTransaction();
session.Save(ui);
trans.Commit();
session.Flush();
}
4.修改方法如下
public void update(userinfo ui,ISession session)
{
ITransaction trans = session.BeginTransaction();
session.Update(ui);
trans.Commit();
session.Flush();
}
5.删除方法如下
public void delete(userinfo ui,ISession session)
{
ITransaction trans = session.BeginTransaction();
session.Delete(ui);
trans.Commit();
session.Flush();
}
这些类可以封装起来,这样就比较容易通用啦,如下,使用object来操作,最后想得到相应实体可以通过拆箱来获得如 userinfo ui = (userinfo)object;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
namespace WindowsFormsApplication13
{
/// <summary>
/// 封装的nhibernateManager,实现xxxx表的操作
/// </summary>
public class <span style="font-family: Arial, Helvetica, sans-serif;">nhibernateManager</span>
{
public ISession init(string configxml = null)
{
Configuration config = new Configuration();
if(configxml == null)
config.Configure(this.GetType().Assembly, "WindowsFormsApplication13.hibernate.cfg.xml");
else
config.Configure(this.GetType().Assembly, configxml);
ISessionFactory factory = config.BuildSessionFactory();
ISession session = factory.OpenSession();
//ITransaction trans = session.BeginTransaction();
return session;
}
/// <summary>
/// sql示范 from userinfo where userid = '1'
/// </summary>
/// <param name="sql"></param>
/// <param name="session"></param>
/// <returns></returns>
public DataTable GetTableFromSql(string sql, ISession session)
{
IList<object> list = session.CreateQuery(sql).List<object>();
DataSet ds = ListToDataSet(list);
return ds.Tables[0];
}
public void insertEntity(object ob,ISession session)
{
ITransaction trans = session.BeginTransaction();
session.Save(ob);
trans.Commit();
session.Flush();
}
public void update(object ob,ISession session)
{
ITransaction trans = session.BeginTransaction();
session.Update(ob);
trans.Commit();
session.Flush();
}
public void delete(object ob,ISession session)
{
ITransaction trans = session.BeginTransaction();
session.Delete(ob);
trans.Commit();
session.Flush();
}
public object getEntityFromId(string table,string id,ISession session)
{
string sql = string.Format("from '{0}' where userid='{1}'", table,id);
IList<object> list = session.CreateQuery(sql).List<object>();
object obj = null;
foreach(object ob in list)
{
obj = ob;
}
return obj;
}
<summary>
/// 实现对ilist到dataset的转换
/// </summary>
/// <param name="reslist">待转换的ilist</param>
/// <returns>转换后的dataset</returns>
public DataSet ListToDataSet(IList<object> ResList)
{
DataSet RDS = new DataSet();
DataTable TempDT = new DataTable();
System.Reflection.PropertyInfo[] p = ResList[0].GetType().GetProperties();
foreach (System.Reflection.PropertyInfo pi in p)
{
TempDT.Columns.Add(pi.Name, System.Type.GetType(pi.PropertyType.ToString()));
}
for (int i = 0; i < ResList.Count; i++)
{
IList TempList = new ArrayList();
//将IList中的一条记录写入ArrayList
foreach (System.Reflection.PropertyInfo pi in p)
{
object oo = pi.GetValue(ResList[i], null);
TempList.Add(oo);
}
object[] itm = new object[p.Length];
//遍历ArrayList向object[]里放数据
for (int j = 0; j < TempList.Count; j++)
{
itm.SetValue(TempList[j], j);
}
//将object[]的内容放入DataTable
TempDT.LoadDataRow(itm, true);
}
//将DateTable放入DataSet
RDS.Tables.Add(TempDT);
//返回DataSet
return RDS;
}
}
}