IsModified всегда ложно в коллекции записи после изменения - PullRequest
0 голосов
/ 05 июня 2018

У меня есть отношение «многие ко многим», настроенное с помощью 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;
}

Но оно всегда возвращается как ложное, даже когда я добавляюсь или удаляюсь из коллекции.Я пытался сделать это двумя разными способами, с помощью функции «Сбор» и «Навигация» в записи «Студент», и ни один из них не работает.

Есть ли другой способ, которым я должен это делать?

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