2015-06-30 4 views
2

Я использую Transactionscope с linqtosql. У меня есть следующий код:MSDTC на сервере 'servername' недоступен с linq to sql

public bool Save(int Id, List<Student> students, List<Subject> subjects) 
{ 
      var isDataSaved = false; 
      using (TransactionScope scope = new TransactionScope()) 
      { 
       try 
       { 
        // Save the students 
        SaveStudents(students); 

        // Save the subjects 
        SaveSubjects(subjects); 

        scope.Complete(); 

        isDataSaved = true; 
       } 
       catch (Exception ex) 
       { 
        throw ex; 
       } 

       return isDataSaved; 
      } 
} 

В обоих методах я использую две таблицы: Студенты, субъектов, находящихся в одной и той же базе данных. Зависимость объекта DataContext настроена с помощью конструктора, как упоминалось в приведенном ниже классе:

public class StudentsRepository:IStudentsRepository 
{ 
    public StudentsRepository() 
    { 
    _dataContext = new SchoollDetailsDataContext(connectionString); 
    } 
} 

же объект DataContext используется в обоих способах SaveStudents и SaveSubjects.

Я получаю исключение: MSDTC на сервере 'servername' недоступен.

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

Может ли кто-нибудь помочь мне узнать, есть ли что-нибудь, что у меня отсутствует?

+0

«Используется один и тот же объект datacontext». Я сомневаюсь в этом. Здесь открываются две связи. Это не имеет ничего общего с локальным/удаленным. Опубликовать полное исключение ToString. Вы оставили информацию. – usr

+0

Что это такое? Этот метод всегда будет возвращать true. Удалите переменную и catch. – usr

+0

Тот же _dataContext используется с самого начала в методе Save Save, а затем переносится на SaveSubjects. Значение переменной isDataSaved используется для сохранения сохраненных данных трека. –

ответ

1

Необходимо включить службу MSDTC.

Пуск -> Панель управления -> Администрирование -> услуги. Найдите услугу Координатор распределенных транзакций и запустите ее. По умолчанию для свойства запуска установлено значение Ручное, поэтому он выключен.