当Method1()
实例化TransactionScope
并调用Method2()
同时实例化TransactionScope
时,.NET如何知道它们在同一范围内?
我相信它不会在内部使用静态方法,否则它在ASP.NET等多线程应用程序上无法正常工作。
是否可以创建自己的类似TransactionScope的类,或者原始的类是否可以使用只有Microsoft知道它们如何工作的特殊功能?
答案 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协调他们所有人。