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

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

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

3 ответов


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

connection.EnlistTransaction(Transaction.Current)

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

HTH


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

    ...
    ...

}

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

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