zoukankan      html  css  js  c++  java
  • NHibernate使用--实战篇

    经过一段时间的学习对于NHibernate有一定的了解,这里记录一下,也分享给更多的人,

    首先是一个代码起手式

    //获取一个ISession对象,放置在Using中这里可以自动销毁,方便管理
                using (ISession _ISession = NHibernateHelp.GetCurrentSession())
                {
                    //创建事务代码块
                    using (var trantion = _ISession.BeginTransaction())
                    {
                        try
                        {
                            //业务操作
    
                            //提交事务
                            trantion.Rollback();
                        }
                        catch (Exception)
                        {
                            //回滚事务
                            trantion.Rollback();
                            //异常处理
                            throw;
                        }finally{
                            //释放资源
                            trantion.Dispose();
                        }
                    }
                }
    NHibernate起手式

    接下来开始介绍,

    一:配置文件 需要配置和数据库相关的属性

    二:创建实体类和XML配置文件与数据中的表进行映射,注:XML以.hbm.xml为后缀名,其次属性中内容的值应为:嵌入的资源,

    三:实际操作:

    3.1 添加

    /// <summary>
            /// 添加用户
            /// </summary>
            /// <param name="_ISession">ISession操作对象</param>
            private static void AddUser(ISession _ISession)
            {
                //创建一个要添加的对象
                Users AddUser = new Users() { Users_Age = 18, Users_IsState = 1, Users_LoginName = "Jike", Users_LoginPwd = "Jike1234", Users_Name = "特朗普*杰克", Users_Roles = "user", Users_Sex = "" };
    
                //调用Save添加方法
    
                //(1)种方法  有返回值 返回主键ID object类型
                object AddUserID = _ISession.Save(AddUser);
    
                //(2)种方法  没有返回值
                _ISession.Persist(AddUser);
    
                //判断添加成功后返回的键
                if (AddUserID != null)
                {
                    Console.WriteLine(string.Format("添加成功了!"));
                }
                else
                {
                    Console.WriteLine(string.Format("添加失败了!"));
    
                }
            }
    添加

    3.2 修改

    /// <summary>
            /// 修改用户
            /// </summary>
            /// <param name="_ISession">ISession操作对象</param>
            private static void UpdateUser(ISession _ISession)
            {
                //创建一个要修改的对象
                Users UpdateUser = new Users() { Users_ID = 12, Users_Age = 18, Users_IsState = 1, Users_LoginName = "Jike", Users_LoginPwd = "Jike1234", Users_Name = "特朗普*杰克斯", Users_Roles = "user", Users_Sex = "" };
    
                //(1)显示调用Update方法进行修改
                _ISession.Update(UpdateUser);
    
    
                //(2) NHibernate会自动跟踪对加载的对象任何修改
    
                Users UpdateUsered = _ISession.Get<Users>(12);
                UpdateUser.Users_Name = "特朗普*杰克";
                Console.WriteLine("修改成功了");
            }
    修改

    3.3 删除

     /// <summary>
            /// 删除特定的用户
            /// </summary>
            /// <param name="_ISession">操作对象</param>
            public static void DeleteUser(ISession _ISession)
            {
    
                //删除对象
    
                //(1)使用Get方法获取要删除的对象  
    
                Users DeteleUser = _ISession.Get<Users>(13);
    
                //(1)使用Load方法获取要删除的对象
                //Users DeteleUser = _ISession.Load<Users>(14);
    
                //调用删除语句
                _ISession.Delete(DeteleUser);
                Console.WriteLine("删除成功了");
            }
    删除

    3.4 查询

    查询有三种语法:SQL  HQL   CreateCriteria条件查询

    /// <summary>
            /// 删除商品订单
            /// </summary>
            /// <param name="Orders_ID"></param>
            /// <returns></returns>
            public ActionResult DeteleOrder(string Orders_ID)
            {
                //验证参数
                if (Orders_ID != null && Orders_ID != "")
                {
                    //创建ISession对象
                    ISession _ISession = NHibernateHelp.GetCurrentSession();
    
                    //创建事务单元块
                    using (var trantion = _ISession.BeginTransaction())
                    {
                        try
                        {
                            //修改集合对象 成功后返回数据1  若失败则会回滚
    
                            object Users = _ISession.CreateSQLQuery(string.Format("delete Orders  where Orders_ID = '{0}';select 1 ", Orders_ID)).List<object>().FirstOrDefault();
    
                            //提交事务
                            trantion.Commit();
    
                            //返回首页
                            return Content("<script>window.location.href = '/Orders/Index'; alert('删除成功!!');</script>");
                        }
                        catch (Exception ex)
                        {
                            //事务回滚
                            trantion.Rollback();
                            throw ex;
                        }
                        finally
                        {
                            //释放资源
                            trantion.Dispose();
                        }
                    }
                }
                return Content("<script>window.location.href = '/Orders/Index'; alert('请选择要删除的对象?');</script>");
            }
    SQL的方式

    由于SQL的方式返回的是Object类型的所以在查询时可以配合CreateSQLQuery().AddEntity(typeof(类型))的方式,NHibernate会在返回数据的时候找到相应类型的配置文件将其和类的属性/变量一一对应,然后类的对象/集合

    HQL的方式和SQL类似,使用时切记一点,你所操作的时类的对象而不是数据库的表
    HQL的方式

    随后我上传一个项目的链接   在OrderNHibernate.Test 程序中就主要应用了CreateCriteria的方式

    项目下载:https://pan.baidu.com/s/1skVl82h ,请直接点击下载,不要打开压缩包,会有广告好像。。。

     另外我再帮助大家认识一下,监视数据流向 和生成的SQL语句,首先我们打开SQL SERVER 数据库找到菜单栏 工具 ---SQL SERVER Profiler,打开后出现如下界面

      

    输入相应数据库连接 登陆

    这个时候我们来运行一段代码  select * from Users

     

    现在数据流中已经出现了对应的SQL语句,我们可以使用这个工具更好的学习,毕竟有些时候错误发生,我们不太容易看出来,但是使用这个工具至少可以把问题,风险排除于数据库之外

  • 相关阅读:
    360云盘、百度云、微云……为什么不出 OS X(Mac 端)应用呢?(用户少,开发成本高)(百度网盘Mac版2016.10.18横空出世)
    其实 Dropbox 的缺点也很明显,速度慢,空间小(我对国内的网盘的建议)
    为什么百度云、360云盘等都取消了同步盘功能?
    验证API
    操作系统进程压榨案例
    查询功能
    JavaScript 动画库和开发框架
    指针
    Attribute Routing
    自定义验证特性
  • 原文地址:https://www.cnblogs.com/huanjinyuan/p/8126696.html
Copyright © 2011-2022 走看看