探索NHibernate中的事务

1.NHibernate中的事务(Transactions)

简单描述:要求ISession使用事务;做一些操作;提交或者回滚事务。

写成代码就像这样:

ITransactiontx = _session.BeginTransaction();

//一些保存、更新、删除等操作

tx.Commit();

实际上在NHibernate使用事务要使用using强制资源清理和异常机制,一般像这样:


2.什么时候使用事务?

回答是:在任何时候都要使用事务,即使是在读取、查询数据的时候,为什么呢?因为你不清楚数据库什么时候操作失败,如何恢复原来数据。而NHibernate中的事务(可以通过 tx.Rollback()方法),帮助我们完成这些事情。

下面看看例子,我们修改上篇的Insert、Update、Delete操作:

1.新建对象


这篇以新建对象为例,分别从成功提交和失败回滚两个角度来测试这个方法。

【测试成功提交】

首先写一个测试用例,假设这个测试可以运行成功:

测试这个方法,使用TestDriven.NET集成的NCover(分析代码的覆盖率)查看代码运行覆盖率,在这个测试方法上右击选择“Test With”—“Coverage”,如下图所示:


这时自动打开NCoverExplorer(查看代码覆盖率的分析结果),我们可以看到CreateCustomerTransaction方法运行覆盖情况,我们发现这个方法通过事务成功提交了操作并返回新的Id。分析结果效果图如下所示:


【测试失败回滚】

我们在写一个失败回滚的测试,由于我认为设置了一个“将截断字符串或二进制数据”错误,这时必须在测试方法上指定测试预期的异常。

同理按上面的步骤测试这个方法看看CreateCustomerTransaction方法运行情况,由于出现错误(这里是“将截断字符串或二进制数据”错误),所以系统抛出了HibernateException异常,此时系统发生回滚。分析结果效果图如下所示:


2.删除对象

我们修改上例中的删除对象的代码,如下所示:


3.更新对象

我们修改上例中的更新对象的代码,如下所示:


4.保存更新对象

我们修改上例中的保存更新对象的代码,如下所示:


好了,由于篇幅有限,上面三个方法在这里我就不测试了,大家可以参考创建对象测试的步骤来测试一下其他几个方法吧!

结语

感觉这节内容很少的样子,在NHibernate官方文档中对事务讲解的并不多,自己挖空心思也就挤了这么多东西。不过在这一节带领大家学会了测试工具TestDriven.NET的另一个功能就是怎么查看代码运行覆盖率,还是有一点收获的哦。下一节想继续深入事务话题一起讨论NHibernate中的并发控制,到现在还没有想好怎么写呢,希望大家对这个系列给出意见和建议。谢谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,572评论 18 399
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 12,769评论 3 93
  • 《史记》研究性学习是指在某些专题上深度的研究并学习《史记》我们每个人学习的专题都不同,我是第一专题,研究的...
    泪已干心已碎阅读 4,739评论 0 0
  • 话说那体型高大,其貌不扬的壮男出了茶栈往东走了不久,身后脚步声忽起,伴随着一声声呼喊道:“大侠留步!大侠请留步!”...
    水石阅读 2,976评论 0 1
  • 记得有句话是这样说的:“人一旦开始堕落,上帝就会以最快的速度收走你的天赋与力量。”这句话在近段时间被我透彻领悟了...
    十二雪阅读 2,900评论 0 0

友情链接更多精彩内容