System.Transactions介绍

news/2024/7/7 22:18:41

在.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


http://lihuaxi.xjx100.cn/news/275851.html

相关文章

类选择器和所作用的标签一起写为什么不起作用? - CSDN博客

原文:类选择器和所作用的标签一起写为什么不起作用? - CSDN博客HTML代码: css样式: 这不是将样式作用于circle类下的有current类的li标签吗?为什么不起作用? 原因: 选择器理解错误! 一般常用的选…

wps在线预览接口_文档在线预览的实现

最近在研究企业文档管理,这个是基本上所有企业都需要的软件,当然也是有很多种解决方案。对于企业文档来说,最基本的需求就是独立存储,共享。这种需求只需要建立一个Windows共享文件夹或者架一个Samba服务器即可实现,无…

你知道为什么Java的main方法必须是public static void?

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试资料来源:http://suo.im/6v9d64Main 方法是我们学习 Java 编程语言时知道的第一个方法,你是否曾经想过为什么 main 方法是 public、static、void 的。当然,很多人…

985 CV 找不到工作? 4 点诚恳建议

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文转自|视觉算法【新智元导读】985研究生,学计算机视觉,出来后找不到工作?新智元带你看看这个70万浏览量问题下的答案干货&#xff1…

10月1日之后,你新建的GitHub库默认分支不叫「master」了

点击上方“视学算法”,选择加"星标"重磅干货,第一时间送达本文转载自:机器之心 | 作者:张倩、杜伟从 2020 年 10 月 1 日开始,GitHub 上的所有新库都将用中性词「main」命名,取代原来的「maste…

android webview mailto,Webview email link (mailto)

问题I have a view and view the site has malito code to send email.When I open the link opens in an error.I want that when I open the link opens Gmail app or another email application.Thanks to all helpers.public class teacher extends Activity implements On…

论文解读 | 微信看一看实时Look-alike推荐算法

作者丨gongyouliu编辑丨lily来源 | 授权转载自大数据与人工智能(ID:ai-big-data)微信看一看的精选文章推荐(见下面图1)大家应该都用过,微信团队在今年发表了一篇文章来专门介绍精选推荐的算法实现细节(Real-time Attention based Look-alike Model,简称R…

Compression Helper Class using SharpZipLib

使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。 usingSystem;usingSystem.Text;usingSystem.IO;usingICSharpCode.SharpZipLib.BZip2;usingICSharpCode.SharpZipLib.GZip;usingICSharpCode.SharpZipLib.Zip;namespaceCompression{ /**////…