• [NHibernate]增删改操作


    目录

    写在前面

    文档与系列文章

    添加数据

    删除数据

    修改数据

    添加修改数据

    总结

    写在前面

    上篇文章介绍了nhibernate的基于面向对象的条件查询。对一个项目来说,增删改查是必不可少的,虽然实现方式不同,但是总有涉及到这部分的代码。之前跟朋友说过一个笑话,你要会增删改查了,一切问题就不是问题了,在加上业务处理基本上就完成一个项目了。可能说的是有点过了,但是我觉得在编码中,重要的是你的业务处理能力,在公司很少人能能站在项目框架或者架构的决策的位置,这个时候,作为开发来说不就是负责模块吗?而这些模块,你如果留心会发现,到处的增删改查,而且样子基本相同。

    使用过Eentity framework或者Linq to Sql的童鞋都知道,在你进行删除,修改和添加的时候,这些改变的数据,其实并没有立即从数据库中删除,而是存在内存中,直到你使用数据库上下文的SaveChange()方法或者SubmitChanges()才会把数据提交给数据库,而这些操作要么提交,要么回滚。

    在Nhibernate中其实一样道理,数据也是存在内存中,直到你调用ISession的Flush()方法才会将数据提交到数据库(成功或者回滚(这个回滚跟事务的回滚是否有区别,下篇文章学过事务之后,再做比较))。

    文档与系列文章

    [Nhibernate]体系结构

    [NHibernate]ISessionFactory配置

    [NHibernate]持久化类(Persistent Classes)

    [NHibernate]O/R Mapping基础

    [NHibernate]集合类(Collections)映射 

    [NHibernate]关联映射

    [NHibernate]Parent/Child

    [NHibernate]缓存(NHibernate.Caches)

    [NHibernate]NHibernate.Tool.hbm2net

    [NHibernate]Nullables

    [NHibernate]Nhibernate如何映射sqlserver中image字段

    [NHibernate]基本配置与测试 

    [NHibernate]HQL查询 

    [NHibernate]条件查询Criteria Query

    添加数据

     创建一个customer对象,然后调用ISession的Save方法加到内存,调用ISession的Flush方法添加到数据库,代码如下:

     1         /// <summary>
     2         /// 添加客户
     3         /// </summary>
     4         /// <param name="customer">客户实体</param>
     5         /// <returns>是否添加成功 </returns>
     6         public bool AddCustomer(Customer customer)
     7         {
     8 
     9             try
    10             {
    11                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
    12                 var session = nhibernateHelper.GetSession();
    13                 //将customer对象写入内存
    14                 session.Save(customer);
    15                 //更新到数据库
    16                 session.Flush();
    17                 return true;
    18             }
    19             catch (Exception ex)
    20             {
    21                 throw ex;
    22             }
    23         }

    熟悉IO操作的朋友应该发现了,在将字节流写入文件的时候,如果不Flush或者close(dispose),这个时候你会发现,写入的文件是没有内容的。只有在Flush或者Close之后,才会将内存中的字节流写入文件。

    删除数据

    描述:获取要删除的对象,然后将该对象删除,代码如下:

     1         /// <summary>
     2         /// 删除客户信息
     3         /// </summary>
     4         /// <param name="customer">客户对象</param>
     5         /// <returns>是否删除成功</returns>
     6         public bool DeleteCustomer(Customer customer)
     7         {
     8             try
     9             {
    10                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
    11                 var session = nhibernateHelper.GetSession();
    12                 // Remove a persistent instance from the datastore
    13                 session.Delete(customer);
    14                 session.Flush();
    15                 return true;
    16             }
    17             catch (Exception)
    18             {
    19                 throw;
    20             }
    21         }

    修改数据

    描述:根据传进的新的客户实体,修改客户信息。代码如下:

     1         /// <summary>
     2         /// 修改客户信息
     3         /// </summary>
     4         /// <param name="customer">客户对象</param>
     5         /// <returns>是否修改成功</returns>
     6         public bool UpdateCustomer(Customer customer)
     7         {
     8             try
     9             {
    10                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
    11                 var session = nhibernateHelper.GetSession();
    12                 //Update the persistent instance with the identifier of the given transient instance.
    13                 session.Update(customer);
    14                 session.Flush();
    15                 return true;
    16             }
    17             catch (Exception)
    18             {
    19                 throw;
    20             }
    21         }

    添加修改数据

    Nhibernate中有这样一种方法,如果该对象存在则去修改,如果不存在则添加。

    ISession可以识别出这不同的对象,并为我们提供了ISession.SaveOrUpdate(object)方法。

    ISession.SaveOrUpdate(object)方法完成如下工作:

      • 检查这个对象是否已经存在Session中。
      • 如果对象不在,调用Save(object)来保存。
      • 如果对象存在,检查这个对象是否改变了。
      • 如果对象改变,调用Update(object)来更新。

    代码如下:

     1         /// <summary>
     2         /// 添加或者修改客户信息
     3         /// </summary>
     4         /// <param name="customer">客户对象</param>
     5         /// <returns>是否修改或添加成功成功</returns>
     6         public bool SaveOrUpdateCustomer(Customer customer)
     7         {
     8             try
     9             {
    10                 NHibernateHelper nhibernateHelper = new NHibernateHelper();
    11                 var session = nhibernateHelper.GetSession();
    12                 //Either Save() or Update() the given instance, depending upon the value of
    13                 //its identifier property.
    14                 session.SaveOrUpdate(customer);
    15                 session.Flush();
    16                 return true;
    17             }
    18             catch (Exception)
    19             {
    20                 throw;
    21             }
    22         }

    在项目中,在修改或者新增数据中,用的最多的是SaveOrUpdate()方法。用起来也很方便,新增或者更新,让程序自己去判断。

    测试,添加一个新的用户,然后去修改该用户信息。

     1         /// <summary>
     2         /// 添加客户信息
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         protected void btnAdd_Click(object sender, EventArgs e)
     7         {
     8             Guid guidCustomerID = Guid.NewGuid();
     9             var customer = new Customer() { CustomerName = "zhangsan", CustomerAddress = "北京 海淀", CustomerID = guidCustomerID };
    10             Business.CustomerBusiness customerBusiness = new Business.CustomerBusiness();
    11             //如果客户信息不存在则添加
    12             if (customerBusiness.SaveOrUpdateCustomer(customer))
    13             {
    14                 customer = new Customer() { CustomerName = "wanger", CustomerAddress = "上海", CustomerID = guidCustomerID };
    15                 //客户信息存在则修改
    16                 if (customerBusiness.SaveOrUpdateCustomer(customer))
    17                 {
    18                     RepeaterDataBind();
    19                 }
    20             }
    21         }

    结果

    生成的sql语句

    总结

     本篇文章介绍了增删改查方法,在项目中用的最多的也是这几种方法,比如你定义一个接口,接口里面就可以定义这四种方法。

  • 相关阅读:
    Multiple actions were found that match the request Web API
    基于REST架构的Web Service设计
    netbeans常用快捷键
    C#中 字符串转换为计算公式,并计算结果
    简谈asp.net下的异步加载
    简谈回顾多条件搜索查询。(适用于新手,老鸟飘过)
    简单回顾NPOI导入导出excel文件
    sql 中的Bulk和C# 中的SqlBulkCopy批量插入数据 ( 回顾 and 粗谈 )
    扩展lamda表达中distinct按照字段去除重复
    log4Net(写入日志文件)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/4048048.html
Copyright © 2020-2023  润新知