Как удалить связь между двумя сущностями
У меня есть два объекта, студент и курс. Учитывая идентификатор студента и идентификатор курса, мне нужно удалить их отношения (что означает, что студент больше не будет проходить этот курс) (обратите внимание, что мне не нужно удалять студента и курс сами, только их отношения).
Я пробовал со студентами.Курсы.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
базовые сущности.