从一开始不懂得用事务,到之后的在每一个DAL层方法的参数中都添加一个SqlTransaction 类型的参数,再到学习PetShop4.0时看到了TransactionScope这个东西后懵懂的使用,是我对于BLL层业务逻辑处理事务方式的发展过程。

  之前没有仔细看过TransactionScope,就是模仿着用,不知道它还能嵌套使用。以至于有些代码要写两份,一份用了TransactionScope包着,一份没有,以便被另一个用了TransactionScope包着的方法来调用这个方法。当然违反了刚学的的一个原则——DRY(Don't Repeat Yourself)。

  现在知道了TransactionScope中的数据库操作实际是参与了其中的环境事务,我将它理解为是自动建立的SqlTransaction,而嵌套在其中的TransactionScope中的数据库操作会关联到这个环境事务中(以TransactionScopeOption.Required为参数生成的TransactionScope)。

  也知道了Complete方法并不是执行后,就会提交事务,而只是表明之前的动作都符合要求,只是一种确认,不执行该方法,事务便不能完成。而只有最外层TransactionScope执行了Complete方法后,在离开using块时,事务才真正的提交。所以说TransactionScope是能嵌套的。

  Transaction类有一静态属性Current,在一个TransactionScope中的Complete方法执行之前可以访问,它返回的便是环境事务。

 

     进去看十几分钟就能快速掌握事务范围

http://msdn.microsoft.com/zh-cn/library/ms172152.aspx

posted on 2010-09-26 22:32  SoXLiang  阅读(367)  评论(0编辑  收藏  举报