我有两个实体(student和studentImage)。更新学生信息时,我会让学生修改数据。如果我已经修改了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();
}
这是我的学生和studentImage实体jsut for show。
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; }
}
答案 0 :(得分:1)
实体框架在确定保存时需要更新哪些记录时做得非常好。它还会自动处理更改跟踪 - 您甚至不需要将实体标记为已修改,因为它使用代理的方式。
如果您保存实体,它将查看实体所依赖的任何关联,并检查这些关联的更改。在确定需要更新/添加哪些记录之后,它将生成以满足约束的方式更新这些记录的查询。