Используете транзакции ADO.Net в TransactionScope?

Я читал о TransactionScope и у меня возник вопрос о его совместимости с транзакциями ADO.Net. Прямо сейчас у нас есть несколько методов доступа к данным, каждый из которых вызывает сохраненную процедуру, запускает и фиксирует свои собственные индивидуальные транзакции. Простые, стандартные методы выглядят так:

sqlCommand = //create SQLCommand with Stored proc
SqlTransaction myTransaction = myConnection.BeginTransaction();
sqlCommand.Transaction = sqlTransaction;
sqlCommand.Execute();
sqlTransaction.Commit();

Я немного упростил, но идею вы поняли.

Теперь мне нужно вызвать два из этих методов класса последовательно и зафиксировать или откатить их как команду из моего бизнес-уровня. Я не могу изменять методы данных, поэтому я подумал о том, чтобы поместить два вызова в блок TransactionScope.

Если я сделаю это, какие параметры мне следует использовать при создании TransactionScope? Я уже пробовал это с помощью параметра TransactionScopeOption.RequiresNew, и все вроде работает, но это просто я экспериментирую, и я не уверен, что это правильный путь. (Здесь я отмечу, что это исключительно транзакции SQL, выполняемые на одном сервере SQL.)

Я вижу, что TransactionScope имеет параметры конструктора для работы с транзакциями COM +. Поскольку я использую транзакции ADO.Net, актуально ли это здесь? Спасибо за совет.


person larryq    schedule 23.11.2009    source источник


Ответы (1)


Документация TransactionScope здесь - хорошее место для начала. .

По сути, это делает ненужной обработку транзакций на уровне ADO. Подключения будут автоматически учитывать существующие внешние транзакции (по умолчанию).

Имейте в виду, что вы также можете изменить способ включения подключений в внешние транзакции через строку подключения. Эта ссылка предоставит более подробную информацию.

Зарегистрируйте «истину». Значение true указывает, что пул подключений SQL Server автоматически включает подключение в текущий контекст транзакции потока создания.

person micahtan    schedule 23.11.2009
comment
Ссылка msdn мертва. Одна из проблем заключается в том, что если соединение было создано за пределами области действия, его необходимо вручную включить в внешнюю транзакцию, вызвав connection.EnlistTransaction(Transaction.Current). - person kristianp; 09.07.2015
comment
Постоянные ссылки! Вместо этого я связался с документами MSDN и опубликовал фрагмент. - person micahtan; 17.07.2015