.net TransactionScope是如何工作的?
当.net TransactionScope是如何工作的?,.net,database,design-patterns,transactionscope,.net,Database,Design Patterns,Transactionscope,当Method1()实例化TransactionScope并调用同样实例化TransactionScope的Method2()时,.NET如何知道两者都在同一范围内? 我相信它不会在内部使用静态方法,否则它在ASP.NET等多线程应用程序上无法正常工作 是否可以创建我自己的TransactionScope类,或者原始类是否使用只有Microsoft才知道其工作原理的特殊功能?TransactionScope基本上是在COM之上构建的-特别是在COM之上 这将协调事务,并允许事务嵌套 简言之,当您
Method1()
实例化TransactionScope
并调用同样实例化TransactionScope
的Method2()
时,.NET如何知道两者都在同一范围内?
我相信它不会在内部使用静态方法,否则它在ASP.NET等多线程应用程序上无法正常工作
是否可以创建我自己的TransactionScope类,或者原始类是否使用只有Microsoft才知道其工作原理的特殊功能?
TransactionScope
基本上是在COM之上构建的-特别是在COM之上
这将协调事务,并允许事务嵌套
简言之,当您第一次调用TransactionScope
时,一个事务会在MSDTC中注册,对TransactionScope
的所有其他调用也是如此。MSDTC协调所有这些问题。希望这有助于:
对于不熟悉TransactionScope的用户,它是Microsoft®.NET Framework 2.0新增的System.Transactions命名空间的一部分。System.Transactions提供了一个完全集成到.NET框架中的事务框架,包括但不限于ADO.NET。Transaction和TransactionScope类是此命名空间中最重要的两个类。如问题所述,您可以创建TransactionScope实例,在该TransactionScope范围内执行的ADO.NET操作将自动登记(您也可以通过Transaction.current静态属性访问当前事务):
有点离题了,所以要说一句话:静态方法对于多线程来说不是什么大问题,您需要担心的是静态数据。有时事务(特别是数据库事务)会升级为DTC,但并不总是如此。@Eduardo-没错。LTM(轻量级事务管理器可以通过MSDTC将事务升级为分布式事务)。确定!!!他们可能也会使用Thread.SetData():@MiklX:那太糟糕了,试试这个问题。稍后我会仔细看看这个。
using(TransactionScope scope = new TransactionScope())
{
... // all operations here part of a transaction
scope.Complete();
}