Entity Framework Core 的 .AsNoTracking():性能与跟踪
Entity Framework Core (EF Core) 提供 .AsNoTracking()
通过避免对检索到的实体进行更改跟踪来提高性能。本文研究了当涉及不同的上下文实例时,使用 .AsNoTracking()
如何影响更新实体。
了解 EF Core 中的更改跟踪
EF Core 通常会跟踪从数据库检索的实体,监视更改以实现高效更新。 .AsNoTracking()
禁用此功能,从而在未预期进行修改时提高性能。
场景:使用单独的上下文检索和更新
我们的场景涉及使用 .AsNoTracking()
检索实体(例如用户),然后使用不同的 EF Core 上下文更新它。
.AsNoTracking()
当使用.AsNoTracking()
时,检索到的实体将与上下文分离。 尝试使用新上下文更新此实体不会自动触发更新;上下文不会将其识别为现有记录。 您必须手动将修改后的实体附加到新上下文,并显式将其状态设置为 EntityState.Modified
以指示需要更新。
省略.AsNoTracking()
相反,如果省略 .AsNoTracking()
,EF Core 将跟踪检索到的实体。 使用不同上下文更新此实体将由 EF Core 自动处理,无需手动附加和状态设置。
选择正确的方法
如果您确定实体不会被修改,则使用 .AsNoTracking()
可以提高性能。但是,如果需要更新,则省略 .AsNoTracking()
可以简化更新过程,因为 EF Core 会自动处理跟踪。 选择取决于您的具体需求以及性能提升是否超过手动更新处理所增加的复杂性。
以上是使用不同上下文实例时.AsNoTracking() 如何影响实体更新?的详细内容。更多信息请关注PHP中文网其他相关文章!