Есть ли способ использовать 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.