Как удалить связь между двумя сущностями

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

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

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

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

2 ответов


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

в EF, вероятно, что-то вроде этого:

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

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

доброжелательность,

D


если у вас есть просто 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();
}

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