TransactionScope如何运作?

Edu*_*rdo 28 .net database design-patterns transactionscope

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

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

Jor*_*dão 17

希望这可以帮助:

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();
}
Run Code Online (Sandbox Code Playgroud)


Ode*_*ded 8

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

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

简而言之,当您第一次调用时TransactionScope,事务会向MSDTC注册,就像所有其他调用一样TransactionScope.MSDTC协调所有人.

  • 有时,事务(特别是数据库事务)会被提升为DTC,但并非总是如此. (2认同)