目录

写在前面

文档与系列文章

添加数据

删除数据

修改数据

添加修改数据

总结

写在前面

上篇文章介绍了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方法添加到数据库,代码如下:

         /// <summary>
/// 添加客户
/// </summary>
/// <param name="customer">客户实体</param>
/// <returns>是否添加成功 </returns>
public bool AddCustomer(Customer customer)
{ try
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
var session = nhibernateHelper.GetSession();
//将customer对象写入内存
session.Save(customer);
//更新到数据库
session.Flush();
return true;
}
catch (Exception ex)
{
throw ex;
}
}

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

删除数据

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

         /// <summary>
/// 删除客户信息
/// </summary>
/// <param name="customer">客户对象</param>
/// <returns>是否删除成功</returns>
public bool DeleteCustomer(Customer customer)
{
try
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
var session = nhibernateHelper.GetSession();
// Remove a persistent instance from the datastore
session.Delete(customer);
session.Flush();
return true;
}
catch (Exception)
{
throw;
}
}

修改数据

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

         /// <summary>
/// 修改客户信息
/// </summary>
/// <param name="customer">客户对象</param>
/// <returns>是否修改成功</returns>
public bool UpdateCustomer(Customer customer)
{
try
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
var session = nhibernateHelper.GetSession();
//Update the persistent instance with the identifier of the given transient instance.
session.Update(customer);
session.Flush();
return true;
}
catch (Exception)
{
throw;
}
}

添加修改数据

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

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

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

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

代码如下:

         /// <summary>
/// 添加或者修改客户信息
/// </summary>
/// <param name="customer">客户对象</param>
/// <returns>是否修改或添加成功成功</returns>
public bool SaveOrUpdateCustomer(Customer customer)
{
try
{
NHibernateHelper nhibernateHelper = new NHibernateHelper();
var session = nhibernateHelper.GetSession();
//Either Save() or Update() the given instance, depending upon the value of
//its identifier property.
session.SaveOrUpdate(customer);
session.Flush();
return true;
}
catch (Exception)
{
throw;
}
}

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

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

         /// <summary>
/// 添加客户信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnAdd_Click(object sender, EventArgs e)
{
Guid guidCustomerID = Guid.NewGuid();
var customer = new Customer() { CustomerName = "zhangsan", CustomerAddress = "北京 海淀", CustomerID = guidCustomerID };
Business.CustomerBusiness customerBusiness = new Business.CustomerBusiness();
//如果客户信息不存在则添加
if (customerBusiness.SaveOrUpdateCustomer(customer))
{
customer = new Customer() { CustomerName = "wanger", CustomerAddress = "上海", CustomerID = guidCustomerID };
//客户信息存在则修改
if (customerBusiness.SaveOrUpdateCustomer(customer))
{
RepeaterDataBind();
}
}
}

结果

生成的sql语句

总结

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

[NHibernate]增删改操作的更多相关文章

  1. 一个使用MVC3+NHibernate “增删改查” 的项目

    一个使用MVC3+NHibernate “增删改查” 的项目  前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框 ...

  2. C# winform窗体设计-对数据库执行增删改操作

    对于学习数据库的人来说,数据库的增删改可谓是最基本的了(小编其实也只是一个小白=-=),这篇文章,小编将于大家讲解数据库增删改操作 在执行数据库增删改的时候主要使用的:Command 类       ...

  3. Jquery easyui开启行编辑模式增删改操作

    Jquery easyui开启行编辑模式增删改操作 Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </ ...

  4. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  5. [转]Jquery easyui开启行编辑模式增删改操作

    本文转自:http://www.cnblogs.com/nyzhai/archive/2013/05/14/3077152.html Jquery easyui开启行编辑模式增删改操作先上图 Html ...

  6. [ruby on rails] 跟我学之(3)基于rails console的查增删改操作

    本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...

  7. JavaScript--DOM增删改操作

    JavaScript使用DOM操作节点来进行增删改操作 <!DOCTYPE html> <html> <head> <meta charset="U ...

  8. Linq to SQL 简单的增删改操作

    Linq to SQL 简单的增删改操作. 新建数据库表tbGuestBook.结构如下: 新建web项目,完成相应的dbml文件.留言页面布局如下 <body> <form id= ...

  9. Hibernate双向关联的增删改操作的属性

    双向关联关系下的增删改操作的属性                    1.cascade属性:  eg:<set name = "emps" cascade="s ...

随机推荐

  1. ipv4理论知识1-ipv4介绍,ipv4记法,地址段个数算法

    定义 在TCP/IP协议中,用于在IP层识别连接到因特网设备的标识符称为因特网地址或IP地址.IPv4地址是一个32位的地址. 地址空间 像IPv4这种定义了地址的协议都有一个地址空间.地址空间就是协 ...

  2. 域用户执行金蝶K/3报错解决方法

    自从上星期测试加域意外将公司考勤系统整出事后,就再也不敢在物理机测试了. 装好虚拟机和装好金蝶K/3系统后,被这条报错信息折腾了好几天,一方面是不熟悉该软件,另一方面是几乎搜不到相关的文章. 一.问题 ...

  3. CF733D Kostya the Sculptor[贪心 排序]

    D. Kostya the Sculptor time limit per test 3 seconds memory limit per test 256 megabytes input stand ...

  4. [tem]树状数组

    通过差分可以玩区间: bi=ai-a(i-1) 查询时考虑位置对答案的贡献 推导一下 #include<iostream> #include<cstdio> #include& ...

  5. SVN Files 的值“ < < < < < < < .mine”无效。路径中具有非法字符。

    错误 1 Files 的值“ < < < < < < < .mine”无效.路径中具有非法字符.     今天使用SVN进行更新的时候,出现了如上问题,想起卓 ...

  6. 十分钟轻松让你认识ASP.NET MVC6

    这篇文章说明下如何在普通编辑器下面开发mvc6应用程序. 上篇文章: 十分钟轻松让你认识ASP.NET 5(MVC6) 首先安装mvc6的nuget包: 可以看到在project.json文件中添加了 ...

  7. 微博公众平台(二)-- Token验证代码

    Token,验证逻辑:1.将Token.timestamp.nonce放入数组 2.将数组从小到大排列 3.将数组按顺序拼装成一个字符串 4.对生成的字符串进行SHA1加密 5.将密文转换为小写 6. ...

  8. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  9. java IO流复制图片

    一.使用字节流复制图片 //字节流方法 public static void copyFile()throws IOException { //1.获取目标路径 //(1)可以通过字符串 // Str ...

  10. python实现计算器

    计算器功能 实现优先级解析,加减乘除四则运算 自定义小数位精度 实现思想: 先找到最里层括号,根据乘除,加减优先级,调用写好的乘除.加减运算函数算出括号内总值,再将原括号式用所得值替换,此过程循环进行 ...