ASP.NET EF Core 中的“ _context.Entry(entity).State = EntityState.Modified ”和“ _context.Entity.Update(entity) ”有什么區別?例如:
[HttpPut]
public async Task<ActionResult<Student>> PutStudent(Student student)
{
_context.Entry(student).State = EntityState.Modified;
await _context.SaveChangesAsync();
return student;
}
[HttpPut]
public async Task<ActionResult<Student>> PutStudent(Student student)
{
_context.Student.Update(student);
await _context.SaveChangesAsync();
return student;
}
uj5u.com熱心網友回復:
將物體的狀態設定為Modified會將物體的所有標量屬性標記為已修改,這意味著SaveChanges將生成更新陳述句來更新除鍵欄位之外的所有映射表欄位。
不問,但單個屬性也可以標記為Modified:
_context.Entry(student).Property(s => s.Name).IsModified = true;
這也將物體的狀態設定為已修改。
該Update方法完全不同,請參閱檔案:
開始跟蹤給定的物體 (...)
對于具有生成鍵的物體型別,如果一個物體設定了其主鍵值,那么它將在 Modified 狀態下被跟蹤。如果未設定主鍵值,則將在已添加狀態下對其進行跟蹤。這有助于確保插入新物體,同時更新現有物體。如果主鍵屬性設定為屬性型別的 CLR 默認值以外的任何值,則認為物體已設定其主鍵值。
這在新物體和更新物體附加到背景關系的斷開連接的場景中非常方便。EF 將找出哪些物體是Added,哪些是Modified.
另一個區別是該Update方法還遍歷嵌套物體。例如,如果Exams是Student類中的一個集合,更新 aStudent也會將其標記Exams為Modified,或者Added它們的鍵未設定。
沒有記錄,但值得一提的是,如果附加了 aStudent和它,那么該方法只會將' 的狀態設定為,而不是.ExamsUnchangedUpdateStudentModifiedExams
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/450078.html
