Удалить объект с отношением многие ко многим из структуры сущностей? - PullRequest
3 голосов
/ 05 августа 2010

У меня есть два объекта (класс, студент) в базе данных с отношением «многие ко многим» (с использованием простой таблицы соединений). Я выяснил, как правильно добавлять новые объекты в таблицы, и теперь я хотел бы удалить объект.

Я пробовал следующее:

// (a classobj with id==1 does exist)
ClassObj cl = (from c in entities.ClassObjs where c.ClassID == 1 select c).First();
entities.ClassObjs.DeleteObject(cl);
entities.SaveChanges();

Что выдает ошибку:

"The DELETE statement conflicted with the REFERENCE constraint \"FK_JunctionClassObjsStudents_Students\".

Где JunctionClassObjsStudents - это имя соединительной таблицы, которая создает отношение «многие ко многим» между классами и таблицами учеников.

Что мне нужно сделать? Спасибо за вашу помощь!!

Ответы [ 3 ]

2 голосов
/ 05 августа 2010

Одним из решений является наложение каскада (или SET NULL) на ФК, а затем воссоздание модели вашей сущности.

1 голос
/ 05 августа 2010

Если я вас правильно понял (и это большое предположение) ...

Таблица классов -> Таблица Class_Student_Junction <- Таблица учеников </p>

Мне кажется, вам нужно сделать это в два этапа. Проблема в моем разуме - это таблица соединений, которую вы создали, которая имеет ограничения. Не помещая это в код, я бы сказал ...

Шаг 1: Запишите ключ класса, который вы хотите удалить

Шаг 2: Удалить все из соединительных таблиц, где внешний ключ для классов равен классу из шага 1.

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

0 голосов
/ 05 августа 2010

Вы должны пройти через каждый StudentObj, который ссылается на этот ClassObj, и удалить ссылку. Это необходимо для поддержания ссылочной целостности.

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