EF Core 的 .AsNoTracking()
和数据库写入:澄清
Entity Framework Core (EF Core) 提供 .AsNoTracking()
通过禁用更改跟踪来优化查询。 当您只需要读取数据并且不打算在当前上下文中修改它时,这非常有用。 但对后续更新的影响需要慎重考虑。
您的示例突出了一个常见的困惑点:
场景: 使用每个请求上下文,首先使用 .AsNoTracking()
检索用户,然后尝试更新同一用户。
第 1 步: context.Set<user>().AsNoTracking()
检索用户 而不进行 跟踪。
第 2 步: context.Set<user>()
尝试更新未跟踪的用户。
关键区别:
使用 .AsNoTracking()
和不使用
.AsNoTracking()
没有 :
.AsNoTracking()
对于:实体不context.Entry(user).State = EntityState.Modified;
被跟踪。 EF Core 不知道您所做的更改。 要更新数据库,您必须在调用 context.SaveChanges()
之前使用
.AsNoTracking()
简而言之,.AsNoTracking()
为只读操作提供了性能提升。 对于更新操作,要么避免在初始检索中使用
以上是更新实体时 EF Core 的 `.AsNoTracking()` 是否会影响数据库写入?的详细内容。更多信息请关注PHP中文网其他相关文章!