01-06-01【Nhibernate (版本3.3.1.4000) 出入江湖】事务
Nhibernate事务的使用:
public void Add(Customer customer)
{
ISession session = _sessionManager.GetSession();
ITransaction transaction = session.BeginTransaction(); try
{
session.Save(customer);
session.Flush();//清除一级缓存 transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
}
finally
{
session.Close();
}
}
测试:
[TestMethod]
[ExpectedException(typeof(NHibernate.Exceptions.GenericADOException))]
public void TestAddTransation()
{
CustomerService customerService = new CustomerService();
OrderService orderService = new OrderService(); Customer customer1 = new Customer()
{
FirstName = "Test",
LastName = "TestAddTransation1",
Age =
};
Order order1 = new Order()
{
OrderDate = DateTime.Now.AddMinutes(),
Customer = customer1
};
Order order2 = new Order()
{
OrderDate = DateTime.Now.AddMinutes(),
Customer = customer1
}; Customer customer2= new Customer()
{
FirstName = null, //数据库要求不能为null,现在故意引发添加异常
LastName = "TestAddTransation",
Age =
};
Order order3 = new Order()
{
OrderDate = DateTime.Now.AddMinutes(),
Customer = customer2
};
Order order4 = new Order()
{
OrderDate = DateTime.Now.AddMinutes(),
Customer = customer2
}; customer1.Orders.Add(order1);
customer1.Orders.Add(order2);
customer2.Orders.Add(order3);
customer2.Orders.Add(order4); customerService.Add(customer1); //customer1及其Order1与Order2能成功插入,因为他们与Customer2不在同一个事务
customerService.Add(customer2); //Customer2插入失败,Order3和Order4也不能成功插入。 Assert.IsNull(customerService.Get(customer1.CustomerId));
Assert.IsNull(orderService.Find(order1.OrderId));
Assert.IsNull(orderService.Find(order2.OrderId));
}
-----------------------------------------------
关于事务操作的添加:
session.Flush();//清除一级缓存
是否会立即保存到数据库
结论是:不会立即保存的数据库,而是等到调用transaction.Commit();才真正保存到数据库:
图解:
01-06-01【Nhibernate (版本3.3.1.4000) 出入江湖】事务的更多相关文章
- 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存
一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...
- 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题
此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的 ,可报废此文,特此声明. NHibernate--Save方法: Cu ...
- 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制
Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...
- 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...
- 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...
- 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider
第一步骤:hibernate.cfg.xml文件补上如下配置: <?xml version="1.0" encoding="utf-8"?> < ...
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存
缓存的范围? 1.事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结 ...
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态
以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根 ...
- 01-05-01-2【Nhibernate (版本3.3.1.4000) 出入江湖】立即加载实现--NHibernateUtil.Initialize()和添加fetch关键字的HQL查询
相关资料: http://www.cnblogs.com/lyj/archive/2008/10/29/1322373.html 问题的提出: 1.延迟加载,可能会引起session已经关闭的异常,例 ...
随机推荐
- PHP 布尔类型
PHP 布尔类型 布尔类型 这是最简单的类型.boolean 表达了真值,可以为 TRUE 或 FALSE. Note: 布尔类型是 PHP 4 引进的. 语法 要指定一个布尔值,使用关键字 TRUE ...
- mac实现jni的demo
今天在看ArrayList 源码时看到了System.arraycopy 这个方法,但是这个方法没有java实现. 后面一通查询查找,才知道 如下图 native是一个java调用c语言来实现的操作的 ...
- ant条件逻辑
<condition property="sdk-folder" value="E:\android\android-sdk\adt-bundle-windows- ...
- Nginx+Keepalived实现高可用站点
Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat. corosync.pacemaker.但是它一般不会单独出现,而是与 ...
- mysql怎么从1开始递增
前提:使用SQLyog数据库管理工具 1.打开更改表: 2.点击表字段下方“高级属性”: 3.找到“自动递增”这一项,值改为1: 4.点击“确定”关闭高级属性表弹出框: 5.点击“Alter”关闭更改 ...
- 关于PHP Websocket 错误: "stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE" 的解决方案
最近在使用Ratchet (一个PHP websocket框架)改造一个PHP网站的时候,出现了错误: "It is set to 1024, but you have descriptor ...
- phpExcel导出excel的类,每步都有说明
require_once WEB_PATH . '/lib/PHPExcel/PHPExcel.php'; require_once WEB_PATH . '/lib/PHPExcel/PHPExce ...
- XSS获取cookie
在你服务器的html目录下创建joke文件夹: 在joke文件夹中创建joke.js 和joke.php joke.js 创建img标签,将它的src属性指向另一个脚本joke.php,这里关键的一点 ...
- ES5中的有9个Array方法
Array.prototype.indexOf Array.prototype.lastIndexOf Array.prototype.every Array.prototype.some Array ...
- pthread属性设置
Posix线程中的线程属性pthread_attr_t主要包括scope属性.detach属性.堆栈地址.堆栈大小.优先级.在pthread_create中,把第二个参数设置为NULL的话,将采用默认 ...