Как «охватить» транзакцию двумя несвязанными или разъединенными вызовами методов? - PullRequest
0 голосов
/ 21 апреля 2009

Я занят созданием приложения для обновления программного обеспечения на C #, WinForms, .NET 3.5, где у меня есть коллекция подключаемых классов задач с общим базовым классом. Мне бы хотелось, чтобы одна задача - обновление базы данных - чтобы начать транзакцию, а другая задача - обновление веб-сайта, чтобы зафиксировать или откатить одну и ту же транзакцию, чтобы веб-сайт и БД всегда были синхронизированы.

Я смутно помню вещи из моих дней VB6, когда метод COM + мог подключиться к транзакции, если она уже была запущена, или начать ее, если нет, и т. Д. У меня также есть смутные воспоминания об этом переносе в .NET Enterprise Services, но было также некоторое время назад.

Какая технология используется для достижения этой цели?

Ответы [ 3 ]

4 голосов
/ 22 апреля 2009

Я думаю, что вы ищете транзакции среды или неявные транзакции

using (TransactionScope scope = new TransactionScope())
{
   // do several stuff in the same transaction
   // calls in here implicitly are in the scope of the transaction.
   // you open several independent connections, which are in the same transaction.
}
3 голосов
/ 21 апреля 2009

Возможно, вы захотите начать здесь.

http://msdn.microsoft.com/en-us/library/86773566.aspx

SqlConnection.BeginTransaction возвращает SqlTransaction, которая реализует IDbTransaction.

Двумя методами, определенными в IDbTransaction, являются Commit () и Rollback (). Если вы сохраняете объект подключения между вызовами, вы сможете передавать транзакцию из одного места в другое и выполнять там фиксацию или откат.

Если вы не используете SQL Server, ваш поставщик базы данных (OleDb, Odbc и т. Д.) Предоставит соответствующий объект.

1 голос
/ 21 апреля 2009

Вдобавок ко мне, я думаю, вы сможете сделать это без специальной технологии. Создайте класс UpgradeManager, который отвечает за запуск обновлений базы данных и веб-страниц. Транзакция должна жить здесь и вызываться, окружая вызовы двумя другими объектами.

Если у вас есть другие задачи для подключения, пусть UpgradeManager перебирает коллекцию ваших задач.

..... или вы могли бы передать транзакцию, как сказал гарпо (его ответ пришел в середине моего сочинения) ... хорошо, что есть варианты. ; -)

Nate

...