Объем транзакции с несколькими подключениями - PullRequest
0 голосов
/ 06 октября 2011

У меня есть процесс, который требует откат всех обновлений и вставок в случае ошибки на любом этапе.Поэтому я хотел использовать класс TransactionScope для достижения этой цели.Вот мой код:

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
    IWE dbContext1 = null;

    using (dbContext1 = new IWE())
    {
        dbContext1.Connection.Open();

        //make some changes using the dbContext1

        //Save Changes but don't discard yet
        dbContext1.SaveChanges(false);

       //make a call to another database
       using (EPE context = new EPE())
       {

          //add or makes some changes
          context.SaveChanges(false);
       }
    }


    //if there were no problems above committ the transaction
    if (success)
    {
         ////if we get here things are looking good.
         scope.Complete();

         //accept the changes above against these connections.
         dbContext1.AcceptAllChanges();
    }
}

Проблема в том, что как только я звоню на второе соединение, я получаю сообщение об ошибке:

"Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов. "

Я проверил, чтобы MSDTC был включен на обоих серверах.Или, по крайней мере, так кажется.

Другая информация: - Между ними нет брандмауэра.
- Первый сервер БД работает под управлением Windows Server 2003 R2 w / sql 2005 - Второй сервер БД работает под управлением Windows Server 2003 w / sql 2000

Может ли кто-нибудь указать мне правильное направление, используя область транзакции без или с использованием распределенных транзакций?

Заранее спасибо, Билли

1 Ответ

1 голос
/ 07 октября 2011

В итоге я пошел по другому пути после того, как потратил много времени, пытаясь заставить распределенные транзакции работать.

Моим решением было просто использовать одно соединение.Поэтому я создал представление для первой БД, сопоставленной с таблицей базы данных на второй БД (также с другим сервером), в которую мне нужно было вставить.Я импортировал это представление в свою сущностную модель, а также во все три оператора cud хранимых процедур (только с использованием вставки, но нуждаюсь в них все) и соответствующим образом отобразил их в объекте сущности.

После этого все работает как надо при одном подключении.

...