为什么不首先更新EF代码中的父实体和子实体时,我必须更新父对象?

本文关键字:更新 实体 对象 代码 EF 为什么不 | 更新日期: 2023-09-27 18:13:51

我有两个实体(student和studentImage)。当更新学生的信息时,我获取学生并修改其中的数据。如果我已经修改了student和studentImage中的数据,为什么当我转到存储库进行更新时,我只需要运行下面所示的第二行?它同时更新student和studentImage行。你会认为我必须更新两者或至少学生,但如果我试图运行两行代码,我得到一个异常抛出…好像我更新学生的时候。它向上传播到学生?

public void Update(Student student)
    {
        //context.Entry(student).State = EntityState.Modified;
        context.Entry(student.StudentImage).State = EntityState.Modified;
    }
public void Save()
    {
        context.SaveChanges();
    }

这里是我的student和studentImage实体,只是为了展示。

public class StudentImage
{
    [Key, ForeignKey("Student")]
    public int StudentId { get; set; }
    public byte[] Image { get; set; }
    public byte[] ImageThumbnail { get; set; }
    public string ContentType { get; set; }
    public virtual Student Student { get; set; } // one-to-one
}
public class Student
{
    public int StudentId { get; set; }
    public virtual StudentImage StudentImage { get; set; } //one-to-one
    [Required]
    public DbGeography LocationPoints { get; set; } //37.1234, -122.2342
    [Required]
    public string Location { get; set; } //ex. San Francisco, CA, USA
    [MaxLength(250)]
    public string Education { get; set; } //State Univesity
    public string Work { get; set; } // Taco Bell, Starbucks
    public StudentStatus Status { get; set; }
}

为什么不首先更新EF代码中的父实体和子实体时,我必须更新父对象?

实体框架在确定保存时需要更新哪些记录方面做得很好。它还可以自动处理更改跟踪-由于它使用代理的方式,您甚至不需要将您的实体标记为已修改。

如果您保存一个实体,它将查看实体所依赖的任何关联,并检查这些变化。在确定需要更新/添加哪些记录之后,它将生成以满足约束的方式更新这些记录的查询。