[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语句

总结

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

博客地址: http://www.cnblogs.com/wolf-sun/
博客版权: 本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

转载:http://www.cnblogs.com/wolf-sun/p/4048048.html

时间: 2025-01-03 08:07:07

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

jQuery+json反射实现所有实体的增删改操作

那么,有三四十张表的话,前台表单是自动生成的.只不过生成的实体和数据库里的表名都是有规律可以 找的.还有操作实体的类,所以我只要通过前台把表单传过来.我就可以知道要反射到哪个实体,然后对实体 进行相应的赋值.再反射一个实体操作的类.就可以实现对实体的增删改操作了 上面是我的数据库表名 下面是我的实体,和实体操作的类名 private void InsertAndUpdateObj(HttpContext context) { string ClassName = context.Request.

javascript实现表格增删改操作实例详解

 本文实例讲述了javascript实现表格增删改操作的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 6

xml dtd-目的:使用java或C#或JSP或ASP等完成对xml文件的增删改操作。

问题描述 目的:使用java或C#或JSP或ASP等完成对xml文件的增删改操作. XML SPY和相关的环境 实验内容自己设计一个小型系统,要求数据存在XML文件中.使用java或C#或JSP或ASP等完成对xml文件的增删改操作.要求有用户操作的界面. (如通讯录管理系统.日志管理系统.班级管理系统等)实验步骤 使用dtd或schema完成所要设计系统的数据设计,并生成相应的xml存储文档.使用高级语言编写系统代码,完成对xml文档的操作 解决方案 有做好的例子吗?能发给我一份吗?谢谢谢谢.

sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解

问题描述 sql中怎样在多表联合查询后的表中进行增删改操作,新手求大神详细讲解 我在C#的winform的DataGridView中显示联合查询的结果,下面就是4张表的联合查询的语句,我需要在DataGridView显示的表中做删除操作,只需要知道删除的sql语句就行,用存储过程也好,级联删除也好,希望详细,我已经在这个问题上困扰很久了,万分感谢! 解决方案 在做C#桌面程序时,我们通常会遇到删除dataGridview中选中的一和或都多行数据,在网上查了好多方法,有些只能删除dataGridv

easyui-jquery easyUI tab中增删改操作问题

问题描述 jquery easyUI tab中增删改操作问题 我发现在tab里面如果有操作会请求新页面时,他就会跳转出当前tab页面,直接显示请求的新页面,我请问各位大神们,怎样实现让这个请求的新页面也在当前tab中显示? 解决方案 tab属性应该会有个URL参数,不要进行请求新页面操作,把新页面的URL写到Tab里面,然后应该也会有一个tab刷新的方法.你可以去看看easyUI的API文档,虽然我没用过,但是肯定是这样做的 解决方案二: 使用tab的refresh或者update函数刷新tab

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

jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点. easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 javascript 应用的必要的功能. 使用 easyui,您不需要写太多 javascript 代码,一般情况下您只需要使用一些 html 标记来定义用户界面. HTML 网页的完整框架. easyui 节省了开发产品的时间和规模. easyui 非常简单,但是功能非常强大. 先给大家展示效果图:

问一个简单的问题,在winform中怎么不涉及到数据库对dgv里数据进行增删改操作呢?

问题描述 问一个简单的问题,在winform中怎么不涉及到数据库对dgv里数据进行增删改操作呢? 还有怎么同时把dgv里数据保存到数据库.我要代码,新增的最好有实体类的代码

Entity Framework 简单增删改操作

原文:Entity Framework 简单增删改操作 前言  在 Entity Framework 简单查询操作 中主要是学习了在Entity Framework中的几种不同模式的查询操作,现在主要来学习一下简单的增加.删除.修改操作. 增加 在EF中添加操作一般有两种方式:一是直接创建对象,然后调用"DbSet"的"Add()"方法进行添加:二是调用数据库上下文的"Entry()"方法并设置对应的状态.无论使用哪种方式最终一定要调用"

Oracle数据库的增删改操作介绍

前面的博文介绍了Oracle的简单查询操作,博客地址:http://blog.csdn.net/weixin_36380516/article/details/65935879 这里再对Oracle的更新操作即Oracle的增删改操作进行简单的介绍 首先要掌握对表结构的基本操作. 增加字段: alter table 表名 add(字段名 字段类型和长度) alter table table_name add(one_column varchar2(10)); 一次增加多个字段的话,每个字段直接以