Разница между различными методами BeginTransaction. - PullRequest
0 голосов
/ 28 июля 2011

В чем разница между следующими методами BeginTransaction:

  1. SqlConnection.BeginTransaction Method

  2. DbConnection.BeginTransaction Method

  3. DbConnection.BeginDbTransaction Method

Кроме того, чем они отличаются от метода TransactionScope () в System.Transaction?

1 Ответ

7 голосов
/ 28 июля 2011
  1. SqlConnection.BeginTransaction создает SqlTransaction, что характерно для MS SQL Server
  2. DbConnection.BeginTransaction создает DbTransaction, который является общим и использует базовое соединение для создания транзакции, специфичной для базы данных. Если ваш DbConnection имеет тип SqlConnection, это будет SqlTransaction.
  3. DbConnection.BeginDbTransaction - это защищенный метод, который вы переопределяете, если создаете свой собственный класс, унаследованный от DbConnection.

EDIT:

Все они относятся к соединению с базой данных, из которого они были созданы, которое используется иначе, чем TransactionScope, который не зависит от базы данных. Я считаю, что если вы хотите координировать транзакции между несколькими подключениями, вам нужно явно вызвать DbConnection.EnlistTransaction(transaction). При использовании TransactionScope соединение (в зависимости от поставщика базы данных, по крайней мере, должно) автоматически включается в TransactionScope, если оно существует при открытии соединения. В WCF TransactionScope также может передаваться через границы служб и может использоваться для фиксации результатов нескольких вызовов служб как одной транзакции.

...