Как работает TransactionScope? - PullRequest
       0

Как работает TransactionScope?

28 голосов
/ 05 августа 2010

Когда Method1() создает экземпляр TransactionScope и вызывает Method2(), который также создает экземпляр TransactionScope, как .NET узнает, что оба находятся в одной и той же области видимости? Я считаю, что он не использует статические методы внутри, иначе он не будет хорошо работать в многопоточных приложениях, таких как ASP.NET.

Можно ли создать мой собственный класс, подобный TransactionScope, или в оригинале используются специальные функции, которые, как Microsoft знает, как они работают?

Ответы [ 2 ]

17 голосов
/ 08 августа 2010

Надеюсь, что это поможет:

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

Для тех, кто не знаком с TransactionScope, он является частью пространства имен System.Transactions, нового в Microsoft® .NET Framework 2.0.System.Transactions предоставляет платформу транзакций, полностью интегрированную в .NET Framework, включая, но не ограничиваясь, ADO.NET.Классы Transaction и TransactionScope являются двумя наиболее важными классами в этом пространстве имен.Как намекает на этот вопрос, вы можете создать экземпляр TransactionScope, и операции ADO.NET, выполненные в рамках этого TransactionScope, будут зачислены автоматически (вы также можете получить доступ к текущей транзакции через статическое свойство Transaction.Current):

using(TransactionScope scope = new TransactionScope())
{
    ... // all operations here part of a transaction
    scope.Complete();
}
8 голосов
/ 05 августа 2010

TransactionScope в значительной степени основывается на COM - особенно над MSDTC .

Это координирует транзакции и позволяет вкладывать транзакции.сначала вы звоните TransactionScope, транзакция регистрируется в MSDTC, как и все другие вызовы TransactionScope.MSDTC координирует их все.

...