Понимание TransactionScope и SQL-соединения - PullRequest
0 голосов
/ 27 мая 2019

В .NET, когда мы используем TransactionScope, мы можем делиться одной транзакцией через несколько соединений.

using(TransactionScope tran = new TransactionScope()) { 
  //this method open a new connection
  CallAMethodThatDoesSomeWork(); 
  //this method open another new connection
  CallAMethodThatDoesSomeMoreWork(); 
  tran.Complete(); 
}

Я не могу понять, как этовозможно, принимая во внимание, что для транзакции в базе данных требуется специфическое соединение.

Как это работает?Я думаю, что, возможно, физическая связь всегда одинакова.Может ли это быть возможно?

Обновление: предположим, что строка соединения одинакова для всех соединений, то есть я не работаю с разными базами данных, всегда одинакова ...

1 Ответ

0 голосов
/ 28 мая 2019

Благодаря комментариям я смог найти ответ здесь .

Когда мы используем TransactionScope , мы можем совместно использовать одну транзакцию для нескольких соединений, поскольку эта транзакция преобразуется враспределенная транзакция ;и Координатор распределенных транзакций (DTC) делает свое волшебство.

В общем случае, даже когда соединения находятся в одной и той же БД, TransactionScope переходит в DTC.

Исключением из правила может быть, когда мы открываем и закрываем разные соединения с одной и той же БД не одновременно ;но это поддерживается не всеми механизмами БД.

...