В двух словах MSDN ваш ответ:
«Корпоративная библиотека, с другой стороны, обычно открывает и закрывает соединение для каждого запроса. Этот подход несовместим с тем, как работает класс TransactionScope. Если имеется несколько соединений, класс TransactionScope считает транзакцию распределенной. транзакция. Распределенные транзакции имеют значительную производительность и ресурсы по сравнению с локальной транзакцией ". (MSDN)
А
"Чтобы избежать этого, методы класса Database, такие как ExecuteDataSet, распознают, когда экземпляр TransactionScope активен, и включают в эту транзакцию вызовы базы данных. Если транзакция активна в настоящее время в результате использования экземпляра TransactionScope, база данных Методы класса используют одно соединение. " (MSDN)
Вы не упоминаете, какую базу данных вы используете. В клиенте Oracle 10g, который я использовал, это был тот случай, когда вы использовали TransactionScope, у вас всегда была бы распределенная транзакция. Похоже, что эта проблема теперь решена в более поздних выпусках .
Вы можете проверить ответ, просмотрев раздел Статистика транзакций .