gpt4 book ai didi

c# - DbContext 更新与 EntityState 修改

转载 作者:行者123 更新时间:2023-12-05 01:52:23 25 4
gpt4 key购买 nike

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;
}

最佳答案

将实体的状态设置为Modified 会将实体的所有标量属性标记为已修改,这意味着 SaveChanges 将生成一条更新语句,更新除键之外的所有映射表字段字段。

不询问,但单个属性也可以标记为已修改:

_context.Entry(student).Property(s => s.Name).IsModified = true;

这也会将实体的状态设置为已修改。

Update 方法完全不同,参见 docs :

Begins tracking the given entity (...)
For entity types with generated keys if an entity has its primary key value set then it will be tracked in the Modified state. If the primary key value is not set then it will be tracked in the Added state. This helps ensure new entities will be inserted, while existing entities will be updated. An entity is considered to have its primary key value set if the primary key property is set to anything other than the CLR default for the property type.

这在新的和更新的实体附加到上下文的断开连接的场景中非常方便。 EF 将确定哪些实体是Added 哪些是Modified

另一个区别是 Update 方法也会遍历嵌套实体。例如,如果 ExamsStudent 类中的集合,则更新 Student 也会将其 Exams 标记为Modified,或 Added 未设置 key 的地方。

没有记录,但值得一提的是,如果 Student 及其 Exams 作为 Unchanged 附加,则 Update 方法只会将 Student 的状态设置为 Modified,而不是 Exams

关于c# - DbContext 更新与 EntityState 修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71593424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com