Подтвердить что ты не робот

Есть ли способ использовать TransactionScope с существующим соединением?

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

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

4b9b3361

Ответ 1

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

connection.EnlistTransaction(Transaction.Current)

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

НТН

Ответ 2

Чтобы подключиться к 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

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

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