在.Net Framework 2.0中,新增了一个名称空间:System.Transactions。从其名字就可以看出来,里面包含了Transaction相关的类。System.Transactions提供了一个“轻量级”的、易于使用的Transaction框架。

在以前,要实现Transaction需要利用EnterpriseServices,让组件从ServiceComponent继承下来。而通过System.Transactions,只要简单的几行代码,不需要继承,不需要Attribute标记,呵呵。

下面介绍System.Transactions中最简单的(也可能是以后最常见的)用法:

using (TransactionScope ts = new TransactionScope())
{
    // 在这里编写需要具备Transaction的代码
    ts.Consistent = true;
}

TransactionScope类用来构建一个Transaction Scope,在这个Scope里面的代码将具备Transaction的能力。TransactionScope实现了IDisposable,在调用TransactionScope.Dispose()的时候,如果Consistent属性没有被设置成true,那么就将会触发Rollback动作。

using (TransactionScope ts = new TransactionScope())
{
    using (SqlConnection conn = new SqlConnection("..."))
    {
        conn.Open();
    }
    ts.Consistent = true;
}

上面的代码就演示了在一个Transaction Scope里面,打开一个数据库连接。这个数据库连接由于处在一个Transaction Scope里面,所以会自动获得Transaction的能力。如果这里数据库连接的是SqlServer2005,那么这个Transaction将不会激活一个MSDTC管理的Distributed Transaction,而是会由.Net创建一个Local Transaction,性能非常的高。但是如果是SqlServer2000或者7,那么则会自动激活一个Distributed Transaction,在性能上遭受一定的损失。

using (TransactionScope ts = new TransactionScope())
{
    using (SqlConnection conn = new SqlConnection("..."))
    {
        conn.Open();
        using (SqlConnection conn2 = new SqlConnection("..."))
        {
            conn2.Open();
        }
    }
    ts.Consistent = true;
}

这个例子更加充分的说明了Transaction Scope的强大,两个数据库连接!虽然上面的conn和conn2是两个不同的连接对象,可能分别连接到不同的数据库,但是由于它们处在一个Transaction Scope中,它们就具备了“联动”的Transaction能力。在这里,将自动激活一个MSDTC管理的Distributed Transaction。(可以通过打开管理中心里面的组件服务,来察看当前的Distributed Transaction列表。)

下面再介绍如何手动将一项资源(Resource)参与(enlist)到一个分布式事务中:

ICommittableTransaction tr = Transaction.Create();
using (SqlConnection conn = new SqlConnection("..."))
{
    conn.EnlistTransaction(tr as ITransaction);
}
tr.Commit();

上面的代码手工创建了一个ICommittableTransaction对象(通过Transaction类的static方法)。SqlConnection对象通过EnlistTransaction()方法参与到这个Transaction中去。注意:EnlistTransaction()方法只接受ITransaction类型,因为ITransaction没有Commit()方法,你肯定不会希望ICommittableTransaction之外的其他对象来执行Commit()方法吧,呵呵。

参考资源链接:
System.Transactions命名空间
MSDNTV: Introducing System.Transactions in .NET Framework 2.0

System.Transactions介绍相关推荐

  1. 谈谈分布式事务之三: System.Transactions事务详解[下篇]

    在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法.该方法对用于创建基于现有Transaction对 象的"依赖事务(Depende ...

  2. 使用System.Transactions

      在.net framework 中 System.Transactions 简化了事务的处理,最近做数据集成的项目,多次使用了事务处理,使用了System.Transactions ,下面我将把他 ...

  3. System.Transactions深入了解

    System.Transactions框架包含了一个称为LTM(Lightweight Transaction Manager)的TM,它隐式的将连接登记于事务中,从内部来看,是由ITransacti ...

  4. “System.Transactions.Diagnostics.DiagnosticTrace”的类型初始值设定项引发异常。

    "System.Transactions.Diagnostics.DiagnosticTrace"的类型初始值设定项引发异常. 参考文章: (1)"System.Tran ...

  5. System.Transactions:实现你自己的Resource Manager

    By Sahil Malik[http://www.developer.com/net/net/article.php/11087_3565196_1] .net 2.0所带来最大的变化之一也许就是S ...

  6. System.Transactions事务超时设置

    System.Transactions 有2个超时属性(timeout 与 maxTimeout),可以通过配置文件来进行设置. 1. timeout System.Transactions 默认的t ...

  7. 基于FPGA的图像处理(一)--System Generator介绍

    计算机视觉系统通常需要进行大量的信息处理才能够得到所需要的信息.目前主要有CPU.GPU.ASIC.DSP.FPGA等计算平台. 常用的计算机视觉系统通过通用计算机进行视觉信息处理,但是,由于CPU的 ...

  8. 【Unity3d】Simple Waypoint System插件介绍

    Simple Waypoint System(SWS)是基于Dotween的一款路径动画插件,Dotween想必大家比较熟悉,是一款很好用的动画插件,SWS在Dotween的基础上实现了可编辑路径,并 ...

  9. android finish 区别,Android Activity类finish、onDestory和System.exit介绍

    image.png finish函数 Activity.finish() Call this when your activity is done and should be closed. 在你的a ...

最新文章

  1. 生成器generator
  2. 初学python还是swift-Swift 势必取代 Python?
  3. 使用cdn和npm引入的区别_在npm上发布自己的vue组件库(使用npm install 或者 CDN的方式引用)...
  4. 深入理解分布式技术 - 负载均衡策略
  5. 类型之间的相互转换php,php学习之数据类型之间的转换介绍
  6. sudo apt-get nmap 报错锁占用
  7. 程序员如何快速迁移 10 亿级数据?
  8. 很喜欢的一首歌曲《Take me to your heart》
  9. android滑动fragment,android中ViewPager结合Fragment进行无限滑动
  10. echarts制作3d柱形图
  11. 计算机视觉相关公开数据集(免费下载)
  12. HPE 3PAR StoreServ存储系统连接解决方案
  13. 知识经济杂志知识经济杂志社知识经济编辑部2022年第33期目录
  14. 从《哪吒之魔童降世》票房火爆,看国产动画产业市场化三十年
  15. 修复图片音频全新升级带特效喝酒神器小游戏微信小程序源码下载
  16. Python计算:sympy解数学方程
  17. MySQL数据库的SQL语句
  18. [HNOI2004]打鼹鼠 简单DP
  19. 新课程上线 | 学习使用 Kotlin 进行 Android 开发的最佳时机!
  20. 看图学习VMWare以及常见问题答疑(转)

热门文章

  1. Redis学习笔记 - 数据类型与API(1)Key
  2. Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法
  3. matlab正态分布
  4. DC-RC加固修补型砂浆
  5. SQL2005CLR函数扩展-正则表达式
  6. linux下的重要服务dns
  7. 共识机制:区块链技术的根基
  8. 如何构建顶部导航条_如何构建导航栏
  9. 浏览器获取浏览历史_浏览器历史的未来
  10. linux虚拟机文件挂载