Как запретить SaveChanges в Entity Framework пытаться добавить ссылочные объекты в базу данных - PullRequest
1 голос
/ 02 февраля 2012

У меня довольно простая ситуация.У меня есть 3 объекты:

  • объект с именем TrainingConsultant, который еще не сохранен в базе данных
  • объект с именем Training, который недавно был сохранен в базе данных иэто EntityState это Detatched.
  • объект под названием «Консультант», который недавно был загружен из базы данных, и он EntityState равен Detatched.

Мне нужно сохранить TrainingConsultant объект со ссылками Consultant и Training, чтобы в базе данных были заполнены все обязательные поля и внешние ключи.

Проблемапока я не позвоню context.TrainingConsultants.AddObject(trainingConsultant); все в отдельном состоянии.После этого и для тренинга, и для консультанта их EntityState изменили на Добавленный, поэтому context.SaveChanges() пытается добавить и training, и consultant в базу данных перед добавлением traingingConsultant.Сбой из-за того, что Consultant уже существует в базе данных, так же, как и `консультант.

Как я могу это исправить, чтобы и Консультант, и Учебное пособие не были сохранены, но при этом на них ссылались?Имейте в виду, что я присваиваю эти 2 ссылочных объекта где-то еще в коде:

 trainingConsultant.Training = training;
 trainingConsultant.Consultant = consultant;

Поэтому, когда дело доходит до сохранения любых изменений, мне потребуется временно сохранить объекты, а затем установить null на .Training.Consultant в TrainingConsultant объекте?

using (var context = new Entity(Settings.sqlDataConnectionDetails)) {

   context.TrainingConsultants.AddObject(trainingConsultant);
   context.SaveChanges();
}

1 Ответ

1 голос
/ 02 февраля 2012

Вы должны просто указать по идентификатору, а не присоединять сущность:

trainingConsultant.TrainingId = training.Id;
trainingConsultant.ConsultantId = consultant.Id;

context.TrainingConsultants.AddObject(trainingConsultant);
context.SaveChanges();

При необходимости вы можете отрегулировать в соответствии с именами полей / столбцов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...