Как удалить отношения между двумя сущностями - PullRequest
10 голосов
/ 20 сентября 2011

У меня есть две сущности: студент и курс. Учитывая идентификатор студента и идентификатор курса, мне нужно удалить их отношения (это означает, что студент больше не будет проходить этот курс) (обратите внимание, что мне не нужно удалять студента и курс самостоятельно, только их отношения).

Я пробовал с Students.Courses.Clear (), но он очищает каждый отдельный курс, а не конкретный. Спасибо.

EDIT: В базе данных Student и Course связаны через таблицу StudentCourse с 2 столбцами: StudentID и CourseID.

Обычно я удаляю строку, чтобы удалить связь, но когда модель была сгенерирована из базы данных, она не создала объект для этой таблицы. Вместо этого Student и Course являются навигационными свойствами друг друга, а их Association устанавливается в таблицу StudentCourse. Спасибо.

Ответы [ 2 ]

11 голосов
/ 20 сентября 2011

У вас будет студент, курс и что-то вроде записанного курса, который содержит идентификатор курса и студента. Просто удалите эту запись, когда она выпадет, или создайте ее при поступлении студента.

В EF возможно что-то вроде этого:

courseToRemove = Student.Courses.FirstOrDefault(c => c.Name == "Mathematics");
Student.Courses.Remove(courseToRemove);

и отправьте ваши изменения.

3 голосов
/ 21 сентября 2011

Если у вас есть только StudentID и CourseID, и вы не хотите загружать Student и все его Courses из базы данных, вы можете попробовать этот трюк:

// Prepare dummy data
var student = new Student() { StudentID = ... };
var course = new Course() { CourseID = ... };
student.Courses.Add(course);  // Courses must be initialized collection

using (var context = new YourContext())
{
    context.Students.Attach(student);
    // Now context should believe that it has Student with single Course loaded from the database
    // So remove that link to existing course but don't delete the course       
    student.Courses.Remove(course);
    context.SaveChanges();
}

Thisдолжен работать с POCO.Я не уверен, что этот трюк работает и с EntityObject базовыми сущностями.

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