为什么我们不应该在 EFCore 中始终使用 AsNoTracking?

问题描述 投票:0回答:1

众所周知,当我们使用 from

AsNoTracking
时,ChangeTracker 不会跟踪实体的更改。 但是当更新使用
AsNoTracking
获取的实体时,EF 会自动跟踪该实体的属性(当调用
SaveChanges()
时)。 那么,基于这种行为,为什么不在 EFCore 中始终使用
AsNoTracking
呢?

c# asp.net .net entity-framework entity-framework-core
1个回答
0
投票
当您知道不需要更改跟踪时,AsNoTracking() 非常有用。但一直使用它意味着失去很多 EF Core 的好处,例如自动更改检测、并发处理、身份解析、缓存和性能(性能 - 跟踪实体更改会产生性能成本,因此如果不需要更改跟踪,请使用 AsNoTracking () 可以通过避免这种开销来提高性能。但是,如果您确实需要对实体进行更改跟踪,则使用 AsNoTracking() 实际上会损害性能,因为当您保存更改时 EF 必须重新创建更改跟踪基础结构。您最终必须手动重新实现其中一些。

跟踪查询与非跟踪查询

© www.soinside.com 2019 - 2024. All rights reserved.