Прямо сейчас у меня есть код, который инициирует транзакции на SQL Server, используя предполагаемый метод:
ExecuteNonQuery(connection, "BEGIN TRANSACTION");
try
{
DoABunchOnStuff(connection);
DoSomeMoreStuff(connection);
JustAFewMoreThings(connection);
ExecuteNonQuery(connection, "COMMIT TRANSACTION");
}
catch (Exception)
{
ExecuteNonQuery(connection, "ROLLBACK TRANSACTION");
throw;
}
Теперь я думаю о возможности изучения идеи использования абстракции транзакций, предоставленной ADO.NET:
.
DbTransaction trans = connection.BeginTransaction();
try
{
DoABunchOnStuff(connection);
DoSomeMoreStuff(connection);
JustAFewMoreThings(connection);
trans.Commit();
}
catch (Exception)
{
trans.Rollback();
throw;
}
Проблема с этим простым преобразованием транзакций на основе SQL Server в транзакции ADO.NET заключается в ошибке:
ExecuteNonQuery требует команды
иметь сделку, когда
соединение, назначенное команде
в ожидающей локальной транзакции.
Свойство транзакции команды
не был инициализирован.
Правильно ли я предположил, что если бы я хотел использовать транзакции ADO.NET, мне пришлось бы полностью уничтожить инфраструктуру, передав объект DbTransaction каждому методу, который работает или может работать внутри сделка?