Ответ 1
На самом деле есть один способ.
connection.EnlistTransaction(Transaction.Current)
Он работает, и он не способствует транзакции для распространения, если это не необходимо (вопреки тому, что говорит документация)
НТН
У меня есть код, который работает как рекомендуемое использование TransactionScope, но имеет внешнее соединение вместо обычной транзакции.
Есть ли способ использовать объект TransactionScope с существующим соединением или есть ли альтернатива в структуре .Net для этой цели?
На самом деле есть один способ.
connection.EnlistTransaction(Transaction.Current)
Он работает, и он не способствует транзакции для распространения, если это не необходимо (вопреки тому, что говорит документация)
НТН
Чтобы подключиться к 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.