Есть ли способ использовать TransactionScope с существующим соединением? - PullRequest
13 голосов
/ 01 июня 2009

У меня есть код, который работает как рекомендованное использование TransactionScope, но имеет внешнее соединение вместо внешней транзакции.

Есть ли способ использовать объект TransactionScope с существующим соединением или есть альтернатива в .Net Framework для этой цели?

Ответы [ 3 ]

27 голосов
/ 01 июля 2010

На самом деле, есть один способ.

connection.EnlistTransaction(Transaction.Current)

Работает и не продвигает транзакцию для распространения, если не нужно (вопреки тому, что сказано в документации)

НТН

5 голосов
/ 01 июня 2009

Чтобы подключить соединение к TransactionScope, необходимо указать 'Enlist=true' в его строке подключения и открыть соединение в области действия этого объекта TransactionScope.

Вы можете использовать SqlConnection.BeginTransaction для существующего соединения.

Обновление : Можете ли вы использовать BeginTransaction так:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlCommand command = connection.CreateCommand();
    SqlTransaction transaction;

    // Start a local transaction.
    transaction = connection.BeginTransaction("SampleTransaction");

    // Must assign both transaction object and connection
    // to Command object for a pending local transaction
    command.Connection = connection;
    command.Transaction = transaction;

    ...
    ...

}
3 голосов
/ 10 июня 2009

После дополнительных исследований ответ на мой вопрос оказался:

Нет, соединение необходимо открыть после создания экземпляра объекта TransactionScope.

...