777*_*777 5 c# http-put dbcontext entity-framework-core asp.net-core
_context.Entry(entity).State = EntityState.ModifiedASP.NET EF Core和之间有什么区别_context.Entity.Update(entity)?例如:
[HttpPut]
public async Task<ActionResult<Student>> PutStudent(Student student)
{
**_context.Entry(student).State = EntityState.Modified;**
await _context.SaveChangesAsync();
return student;
}
Run Code Online (Sandbox Code Playgroud)
[HttpPut]
public async Task<ActionResult<Student>> PutStudent(Student student)
{
**_context.Student.Update(student);**
await _context.SaveChangesAsync();
return student;
}
Run Code Online (Sandbox Code Playgroud)
将实体的状态设置为Modified会将实体的所有标量属性标记为已修改,这意味着SaveChanges将生成更新语句来更新除关键字段之外的所有映射表字段。
没有询问,但单个属性也可以标记为Modified:
_context.Entry(student).Property(s => s.Name).IsModified = true;
Run Code Online (Sandbox Code Playgroud)
这还将实体的状态设置为已修改。
方法Update完全不同,请参阅文档:
开始跟踪给定实体 (...)
对于具有生成键的实体类型,如果实体设置了主键值,那么它将在“已修改”状态下进行跟踪。如果未设置主键值,则会在“已添加”状态下进行跟踪。这有助于确保插入新实体,同时更新现有实体。如果主键属性设置为属性类型的 CLR 默认值以外的任何值,则实体被视为已设置其主键值。
这在新的和更新的实体附加到上下文的断开连接的场景中非常方便。EF 将找出哪些实体是Added,哪些是Modified。
另一个区别是该Update方法还遍历嵌套实体。例如,如果Exams是类中的一个集合Student,则更新 aStudent也会将其标记Exams为Modified,或者Added未设置其键的位置。
没有记录,但值得一提的是,如果 aStudent及其Exams附加为Unchanged那么该Update方法只会将Student的状态设置为Modified,而不是Exams。
| 归档时间: |
|
| 查看次数: |
4536 次 |
| 最近记录: |