CSLA中业务层事务的实现

在企业级开发中,为保持业务数据的一致性,事务是经常需要用到的。

在CSLA框架中,有文章说只要给方法加上标签([Transactional(TransactionalTypes.TransactionScope)]),就可以实现。经过我的大量实践,这个标签没有作用。

我们最初使用的是SqlTransaction,将事务作为参数在方法之间传递,这样做会产生两个问题:

1.业务方法间的调用发生在数据访问层DAO,这样必然会将一些业务逻辑也写在数据访问层,业务逻辑层将失去应有的作用。

2.事务很难控制,代码量大,在调用其它业务方法时,不一定会有事务的参数。

解决办法是在业务逻辑层使用 TransactionScope(经量级事务),方法如下:

1.在工程中引用System.Transactions.dll

2.在类文件中引入命名空间using System.Transactions;

3.重写CSLA的方法,代码如下:

ExpandedBlockStart.gif ResumeScore类的Save方法
 1           public   override  ResumeScore Save()
 2          {
 3              ResumeScore resumeScore  =   null ;
 4               using  (TransactionScope ts  =   new  TransactionScope(TransactionScopeOption.Required))
 5              {
 6                  resumeScore  =   base .Save();
 7                  ts.Complete();
 8              }
 9               return  resumeScore;
10          }
ExpandedBlockStart.gif Resume类的Save方法
 1           public   override  Resume Save()
 2          {
 3              Resume resume  =   null ;
 4               using  (TransactionScope ts  =   new  TransactionScope(TransactionScopeOption.Required))
 5              {
 6                  resume  =   base .Save();
 7                   if  ( this .ResumeScore  !=   null )
 8                  {
 9                       this .ResumeScore.Save();
10                  }
11                  ts.Complete();
12              }
13               return  resume;
14          }

在上述代码中,Resume的Save方法中调用ResumeScore的Save方法,这样业务处理就写在了业务层,并且实现了事务的处理。

说明, TransactionScope的说明与用法,请参考:http://www.cnblogs.com/zhangpengshou/archive/2009/07/20/1527269.html

注意:需要启动分布式事务及开启网络访问,可以查阅其它资料,如http://www.cnblogs.com/dengsu888666/archive/2007/04/02/696555.html

 

转载于:https://www.cnblogs.com/brawei/archive/2010/08/22/1805773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值