SqlConnection.BeginTransaction
создает SqlTransaction
, что характерно для MS SQL Server
DbConnection.BeginTransaction
создает DbTransaction
, который является общим и использует базовое соединение для создания транзакции, специфичной для базы данных. Если ваш DbConnection
имеет тип SqlConnection
, это будет SqlTransaction
.
DbConnection.BeginDbTransaction
- это защищенный метод, который вы переопределяете, если создаете свой собственный класс, унаследованный от DbConnection
.
EDIT:
Все они относятся к соединению с базой данных, из которого они были созданы, которое используется иначе, чем TransactionScope, который не зависит от базы данных. Я считаю, что если вы хотите координировать транзакции между несколькими подключениями, вам нужно явно вызвать DbConnection.EnlistTransaction(transaction)
. При использовании TransactionScope соединение (в зависимости от поставщика базы данных, по крайней мере, должно) автоматически включается в TransactionScope, если оно существует при открытии соединения. В WCF TransactionScope также может передаваться через границы служб и может использоваться для фиксации результатов нескольких вызовов служб как одной транзакции.