NHibernate-2.1.2 简单增删查改操作

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;
        }
    }
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值