[NHibernate]增删改操作
目录
写在前面
上篇文章介绍了nhibernate的基于面向对象的条件查询。对一个项目来说,增删改查是必不可少的,虽然实现方式不同,但是总有涉及到这部分的代码。之前跟朋友说过一个笑话,你要会增删改查了,一切问题就不是问题了,在加上业务处理基本上就完成一个项目了。可能说的是有点过了,但是我觉得在编码中,重要的是你的业务处理能力,在公司很少人能能站在项目框架或者架构的决策的位置,这个时候,作为开发来说不就是负责模块吗?而这些模块,你如果留心会发现,到处的增删改查,而且样子基本相同。
使用过Eentity framework或者Linq to Sql的童鞋都知道,在你进行删除,修改和添加的时候,这些改变的数据,其实并没有立即从数据库中删除,而是存在内存中,直到你使用数据库上下文的SaveChange()方法或者SubmitChanges()才会把数据提交给数据库,而这些操作要么提交,要么回滚。
在Nhibernate中其实一样道理,数据也是存在内存中,直到你调用ISession的Flush()方法才会将数据提交到数据库(成功或者回滚(这个回滚跟事务的回滚是否有区别,下篇文章学过事务之后,再做比较))。
文档与系列文章
[NHibernate]持久化类(Persistent Classes)
[NHibernate]集合类(Collections)映射
[NHibernate]缓存(NHibernate.Caches)
[NHibernate]NHibernate.Tool.hbm2net
[NHibernate]Nhibernate如何映射sqlserver中image字段
[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]增删改操作的更多相关文章
- 一个使用MVC3+NHibernate “增删改查” 的项目
一个使用MVC3+NHibernate “增删改查” 的项目 前言: 谈到NHibernate大伙并不陌生,搞Java的更是清楚,Hibernate是一个目前应用的最广泛的开放源代码的对象关系映射框 ...
- C# winform窗体设计-对数据库执行增删改操作
对于学习数据库的人来说,数据库的增删改可谓是最基本的了(小编其实也只是一个小白=-=),这篇文章,小编将于大家讲解数据库增删改操作 在执行数据库增删改的时候主要使用的:Command 类 ...
- Jquery easyui开启行编辑模式增删改操作
Jquery easyui开启行编辑模式增删改操作 Jquery easyui开启行编辑模式增删改操作先上图 Html代码: <table id="dd"> </ ...
- OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)
公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...
- [转]Jquery easyui开启行编辑模式增删改操作
本文转自:http://www.cnblogs.com/nyzhai/archive/2013/05/14/3077152.html Jquery easyui开启行编辑模式增删改操作先上图 Html ...
- [ruby on rails] 跟我学之(3)基于rails console的查增删改操作
本章节展开对model的介绍:包括查增删改操作.紧接着上面一节<[ruby on rails] 跟我学之HelloWorld> 创建模型 使用命令创建模型 创建表post,默认自带两栏位 ...
- JavaScript--DOM增删改操作
JavaScript使用DOM操作节点来进行增删改操作 <!DOCTYPE html> <html> <head> <meta charset="U ...
- Linq to SQL 简单的增删改操作
Linq to SQL 简单的增删改操作. 新建数据库表tbGuestBook.结构如下: 新建web项目,完成相应的dbml文件.留言页面布局如下 <body> <form id= ...
- Hibernate双向关联的增删改操作的属性
双向关联关系下的增删改操作的属性 1.cascade属性: eg:<set name = "emps" cascade="s ...
随机推荐
- Node Pm2 配置
系统环境:Centos7 第一步安装NodeJS 建议采用稳定编译过的版本,source code稍麻烦,编译过的直接可用,安装超级简单 下载完成后安装成功 node -v 显示版本号 npm -v ...
- XCode6 开发本地化应用
使用 XCode 6 开发本地化时,第一步,不能忘记,否则在添加本地化文件时,可能会找不到简体中文. 此外,如果使用 NSLocalizedString(@"xxx", nil) ...
- WPF Tranform-Flip Image
Use a ScaleTransform with a ScaleX of -1 for horizontal and ScaleY of -1 for vertical flipping, appl ...
- [WPF系列]-ListBox
引言 本文就WPF中的ListBox常用项给以实例代码演示,包括隐蔽属性的设置,Style设置,以及ControlTemplate的自定义. Listbox平滑滚动 <ListBox Ite ...
- The Engine Document of JustWeEngine
JustWeEngine - Android FrameWork An easy open source Android Native Game FrameWork. Github Game core ...
- 《The Elder Scrolls V: Skyrim》百般冷门却强力职业
<The Elder Scrolls V: Skyrim>百般冷门却强力职业 1.有如成龙平常的杂耍型战斗窃贼 每次看帖都察觉大伙一贯在强调窃贼不需要防御,窃贼不需要血,窃贼就是一击致命, ...
- NYOJ 451
光棍节的快乐 描述 光棍们,今天是光棍节.聪明的NS想到了一个活动来丰富这个光棍节. 规则如下: 每个光棍在一个纸条上写一个自己心仪女生的名字,然后把这些纸条装进一个盒子里,这些光 棍依次抽取一张纸条 ...
- 线程私有数据和pthread_once
#include <stdio.h> #include <pthread.h> pthread_key_t key; pthread_once_t ponce = PTHREA ...
- centos7.0 安装字体库
最近在centos7.0下用itextpdf将word文档转成pdf时出现字体丢失的情况.网上找了很多资料,各式各样的原因和解决方法.后来经过一番测试发现是centos7.0 minimal没有安装相 ...
- 读书笔记---《火球:UML大战需求分析》
书评 作为一本UML和需求分析的入门书来说还算可以,写的比较接地气,如果是做过很多项目的读者,很容易找到共鸣点. 美中不足:部分概念可能有错误,其中对于Component和Artifact的解释明显和 ...