EntityState.在更新EF Core和EF 6时,Modified的工作方式是不同的

本文关键字:EF Modified 是不同 工作 方式 6时 更新 Core EntityState | 更新日期: 2023-09-27 18:15:47

当我用EF 6运行这个方法时,学生被更新了!

 public async Task Update(Student student)
        {
            context.Entry(student).State = EntityState.Modified;
            await context.SaveChangesAsync();
        }

当我用EF 7运行这个方法时,数据库中没有任何变化!

我做错了什么?我不想先检索实体来更新它!

我在SaveChanges周围放了一个try/catch,得到了这个错误消息:

The UPDATE statement conflicted with the FOREIGN KEY constraint "FK_Students_Schoolclasses_SchoolclassId". The conflict occurred in database "TGBData", table "dbo.Schoolclasses", column 'Id'.
The statement has been terminated.

是一个问题,当我设置整个实体状态修改,当它的属性之一(例如Student.SchoolclassId)是一个外键?

更新2

public class Student
{
    public Student()
    {
        StudentsTests = new HashSet<StudentTest>();
        StudentsSubjects = new HashSet<SubjectStudent>();
    }
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public ISet<StudentTest> StudentsTests { get; set; }
    public ISet<SubjectStudent> StudentsSubjects { get; set; }
    public Schoolclass Schoolclass { get; set; }
    public int SchoolclassId { get; set; }
}
public class Schoolclass
{
    public Schoolclass()
    {
        Students = new HashSet<Student>();
        Tests = new HashSet<Test>();
    }
    public int Id { get; set; }
    public string Number { get; set; }
    public ISet<Student> Students { get; set; }
    public ISet<Test> Tests { get; set; }
    public Schoolyear Schoolyear { get; set; }
    public int SchoolyearId { get; set; }
}

当输入Update方法时,学生的FirstName/LastName属性具有新值!

EntityState.在更新EF Core和EF 6时,Modified的工作方式是不同的

您的错误是指出您的学生有SchoolclassId,并且该值不存在于外表中,即Schoolclasses表中的Id。

在调用SaveChanges之前检查SchoolclassId的值。此值很可能不存在于Schoolclasses表中。

换句话说,这个错误不是因为EF 6和EF 7,而是由于在相关表中没有找到外键。