2017-02-01 2 views
0

Я использую TransactionScope для поддержания транзакции между двумя базами данных. Я создал 2 базы данных, используя 2 разных DbContext, но я получаю ошибку во втором вызове метода SaveChanges() . Я запустил MSDTC (Distributed Transaction Coordinator) & зависимую службу, но все еще получаю ошибку.Не удалось исправить ошибку MSDTC

using (var transaction = new TransactionScope(TransactionScopeOption.Required)) 
     { 
      using (var employeeContext = new EmployeeDbContext()) 
      { 
       var newEmployee = new Employee { Id = 1, Name = "Pankaj" }; 
       employeeContext.Employee.Add(newEmployee); 
       using (var orderContext = new OrderDbContext()) 
       { 
        var newOrder = new Order { EmployeeId = 1, OrderId = 1, OrdreName = "Test", Amount = 100 }; 
        orderContext.Order.Add(newOrder); 

        employeeContext.SaveChanges(); 
        orderContext.SaveChanges();//getting error here 
        transaction.Complete(); 
       } 
      } 

     } 

Error

Я не получаю сообщение об ошибке, когда я использую одного DbContext, выше только ошибка приходит с несколькими DbContext

ответ

0

не знаю, если вы все еще ищете решение - но если: Вы пытались изменить настройки MS DTC? Возможно, вы не разрешаете удаленным клиентам. Вы можете сделать такую ​​настройку, если вы введете dcomcnfg в поле поиска (в windows => Старт). После этого службы компонентов должны открыться. После этого вы перейдете в Службы компонентов => Компьютер => Мой компьютер => Координатор распределенных транзакций => [Your_DTC]. В DTC вы можете открыть страницу свойств, где вы можете изменить (например) параметры безопасности. Проверка «Разрешить удаленные клиенты» может решить вашу проблему. Если нет, попробуйте некоторые другие параметры ..

Там должны StackOverflow вопросы, которые я буду рекомендовать: MSSQL Error 'The underlying provider failed on Open' и How to run two Entity Framework Contexts inside TransactionScope without MSDTC?

You've сказал:

Я не получаю ошибку, когда я используя один dbContext, выше ошибки только с несколькими DbContext

Причина такого поведения довольно ясна: TransactionScope помогает вам обрабатывать транзакции. Microsoft предоставляет по умолчанию двух менеджеров транзакций: LTM (легкий менеджер транзакций) для «легких» транзакций и DTC для распределенных транзакций. MS автоматически переводит транзакции в DTC, если транзакции соответствуют некоторым критериям. Одним из критериев является транзакционный доступ к двум различным базам данных. Поэтому, если вы хотите «обходить» вашу проблему, и если это возможно, вы можете попытаться избежать множественного доступа к базе данных в одной транзакции. В результате этой модификации ваша транзакция больше не будет увеличена до MS DTC.

+0

Вот еще один вопрос о stackoverflow, который может помочь вам http://stackoverflow.com/questions/11451112/why-is-my-transactionscope-trying-to-use-msdtc-when-used-in-an-ef -code-first-app? rq = 1 – Joshit

+0

Отлично, работайте для меня. 1-й я выполнил следующий шаг и запустил сервер MSDTC и зависимый сервер, используя учетную запись «Сетевая служба». теперь моя транзакция работает нормально :) Спасибо большое @Joshit –

+0

@PankajRawat: Отлично! Пожалуйста :) – Joshit

Смежные вопросы