惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Attack and Defense Labs
Attack and Defense Labs
T
Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
Intezer
C
Cyber Attacks, Cyber Crime and Cyber Security
The Register - Security
The Register - Security
量子位
Security Latest
Security Latest
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
C
CXSECURITY Database RSS Feed - CXSecurity.com
MyScale Blog
MyScale Blog
J
Java Code Geeks
Apple Machine Learning Research
Apple Machine Learning Research
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Spread Privacy
Spread Privacy
Jina AI
Jina AI
博客园 - 【当耐特】
P
Palo Alto Networks Blog
Last Week in AI
Last Week in AI
SecWiki News
SecWiki News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
G
GRAHAM CLULEY
宝玉的分享
宝玉的分享
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
The Blog of Author Tim Ferriss
V
Vulnerabilities – Threatpost
有赞技术团队
有赞技术团队
T
Tor Project blog
H
Hacker News: Front Page
A
Arctic Wolf
NISL@THU
NISL@THU
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
V
V2EX
N
News and Events Feed by Topic
Webroot Blog
Webroot Blog
Know Your Adversary
Know Your Adversary
P
Privacy International News Feed
I
InfoQ
D
Docker
L
LINUX DO - 最新话题
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
U
Unit 42

博客园 - 白亚伟

如何在快速迭代开发中写清楚需求,提高与软件工程师的沟通效率 Tomcat8.5.56配置多个服务 PowerDesign设置列名与表名的大小写规则 Nunit在VS2010加载不了程序集的解决办法 ArcGIS JavaScript API本地部署离线开发环境 读《敏捷个人-认识自我,管理自我》之学习 读《敏捷个人-认识自我,管理自我》之Scrum的核心价值观 读《敏捷个人-认识自我,管理自我》之责任 SuperMap实现2.5维地图的热区功能 温习计算机基础的好去处--网易公开课 WIN7下.Net开发遇到的又一问题:HTTP 错误 500.19 - Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。 IIS7下安装.net1.1 年终了,总结一下 VS2003出现ASP.NET版本不匹配,解决方法 CSLA中的连接管理器ConnectionManager CSLA.NET权限规则的困惑 转载:提升SQL Server程序员工作效率的几个技巧 svn提交时设置文件类型过滤 .net showModalDialog传递大对象时,ie出错自动关闭,求助
CSLA中业务层事务的实现
白亚伟 · 2010-08-22 · via 博客园 - 白亚伟

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

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

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

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

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

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

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

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

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

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         }

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