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) 出入江湖】事务的更多相关文章

  1. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存

    一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...

  2. 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题

    此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的 ,可报废此文,特此声明. NHibernate--Save方法: Cu ...

  3. 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制

    Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...

  4. 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...

  5. 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...

  6. 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider

    第一步骤:hibernate.cfg.xml文件补上如下配置: <?xml version="1.0" encoding="utf-8"?> < ...

  7. 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存

    缓存的范围? 1.事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结 ...

  8. 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态

    以下属于不明来源资料: 引入 在程序运行过程中使用对象的方式对数据库进行操作,这必然会产生一系列的持久化类的实例对象.这些对象可能是刚刚创建并准备存储的,也可能是从数据库中查询的,为了区分这些对象,根 ...

  9. 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已经关闭的异常,例 ...

随机推荐

  1. C++使用类型代替枚举量

    自己写的C++类型枚举量,可以使用类型识别取代模板,绑定枚举量和多组调用函数,在调用阶段只要指定某组函数就可以根据枚举量调用相应函数. 代码如下: #ifndef __MYENUM_H__ #defi ...

  2. windows phone 手机截图

    无聊在商城找了一款小游戏玩,看到一个截屏功能,就google了一下具体实现,还是比较简单的,主要是靠WriteableBitmap(提供一个可写入并可更新的 BitmapSource)类实现.看一下m ...

  3. 【风马一族_git_github】git与github的英文记录

    Pull requests  Issues Gist 请求 问题 要点 ---------------------------------------------------------------- ...

  4. Abstract_Factory

    #include <iostream> using namespace std; #define DESTORY_POINTER(ptr) if (ptr) { delete ptr; p ...

  5. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  6. 关于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 ...

  7. 防火墙设置:虚拟机ping不通主机,但是主机可以ping通虚拟机(转载)

    我在Windows7系统安装了虚拟机,通过虚拟机安装了Ubuntu13.04,我设置的主机与虚拟机的连接方式是桥接,安装好后,发现虚拟机ping不通主机,但是主机可以ping通虚拟机. 我的操作是:关 ...

  8. Hadoop命令摘录

    一:文件操作 1.建立目录 [hadoop@hadoop1:hadoop]$bin/hadoop dfs -mkdir testdir 在HDFS中建立一个名为testdir的目录 2.上传文件到HD ...

  9. keyboard

    一 按键驱动程序的简单实现 下面是基于中断和消息的按键驱动程序,其工作原理是:当应用程序读取键值时,会调用按键驱动程序的read函数,而我们实现的read函数检测完读取长度后没有直接读取键值而是等待按 ...

  10. ngnix 下配置多域名跳转 配置方法

    自己申请了多个域名,统一使用 http://goipc.cn/ 格式访问网站 server_name goipc.cn ; server_name www.goipc.cn ; server_name ...