TransactionScope如何运作?

时间:2010-08-05 18:22:12

标签: .net database design-patterns transactionscope

Method1()实例化TransactionScope并调用Method2()同时实例化TransactionScope时,.NET如何知道它们在同一范围内? 我相信它不会在内部使用静态方法,否则它在ASP.NET等多线程应用程序上无法正常工作。

是否可以创建自己的类似TransactionScope的类,或者原始的类是否可以使用只有Microsoft知道它们如何工作的特殊功能?

2 个答案:

答案 0 :(得分:16)

希望这会有所帮助:

http://msdn.microsoft.com/en-us/magazine/cc300805.aspx

  

对于那些不熟悉TransactionScope的人来说,它是Microsoft®.NETFramework 2.0新增的System.Transactions命名空间的一部分。 System.Transactions提供了完全集成到.NET Framework中的事务框架,包括但不限于ADO.NET。 Transaction和TransactionScope类是此命名空间中最重要的两个类。正如问题所暗示的那样,您可以创建一个TransactionScope实例,并在该TransactionScope范围内执行的ADO.NET操作将自动登记(您还可以通过Transaction.Current静态属性访问当前事务):

using(TransactionScope scope = new TransactionScope())
{
    ... // all operations here part of a transaction
    scope.Complete();
}

答案 1 :(得分:8)

TransactionScope几乎建立在COM之上 - 特别是在MSDTC之上。

这可以协调事务,并允许嵌套事务。

简而言之,当您第一次呼叫TransactionScope时,一个事务向MSDTC注册,与TransactionScope的所有其他呼叫一样。 MSDTC协调他们所有人。