У меня есть отношение «многие ко многим», настроенное с помощью Entity Framework, например:
public class Student
{
public int StudentId { get; set; }
public string Name { get; set; }
public List<StudentCourse> StudentCourses { get; set; }
}
public class Course
{
public int CourseId { get; set; }
public string Name { get; set; }
public List<StudentCourse> StudentCourses { get; set; }
}
public class StudentCourse
{
public int StudentId { get; set; }
public Student Student { get; set; }
public int CourseId { get; set; }
public Course Course { get; set; }
}
У меня есть метод, в котором вы можете изменить курсы, в которые зачислен студент, как путем удаления, так идобавление StudentCourses для Student.
Одна вещь, которую я хочу сделать, это проверить, была ли изменена коллекция StudentCourses для Student.Я пытаюсь сделать это, используя свойство IsModified в записи Student.
public async Task<Student> EditStudentAsync(int id)
{
var existingStudent = await _dbContext.Students
.Include(s => s.StudentCourses)
.FirstOrDefaultAsync(s => s.Id.Equals(id));
existingStudent.StudentCourses.RemoveAll(sc =>
...
// courses to delete
);
existingStudent.StudentCourses.AddRange(
...
// courses to add
);
// check if StudentCourses have been added to or deleted from
bool coursesChanged = _dbContext.Entry(existingStudent)
.Collection(s => s.StudentCourses).IsModified;
coursesChanged = _dbContext.Entry(existingStudent)
.Navigation("StudentCourses").IsModified;
// do something if they changed
await _dbContext.SaveChangesAsync();
return existingStudent;
}
Но оно всегда возвращается как ложное, даже когда я добавляюсь или удаляюсь из коллекции.Я пытался сделать это двумя разными способами, с помощью функции «Сбор» и «Навигация» в записи «Студент», и ни один из них не работает.
Есть ли другой способ, которым я должен это делать?