entity-framework - Entity Framework 中的AsNoTracking()

标签 entity-framework

我使用AsNoTracking(),并且知道使用它时禁用了一级缓存。但是如何使用AsNoTracking()来提高性能呢?使用它有什么好处?

最佳答案

AsNoTracking()意味着ObjectContext实例不会在本地缓存实体。这有一些实际好处:

  • 内存使用情况:由于ObjectContext在返回给您之后没有引用实体,因此垃圾收集器可以在不再引用它们时立即摆脱它们。通常,在发生这种情况之前,需要先处理ObjectContext。
  • 性能:由于EF不必尝试将数据库返回的每个记录与身份映射中的本地实体进行匹配,因此查询的执行速度可能会稍快。
  • 货币:由于查询返回的是直接从数据库结果实现的实体,并且不依赖于本地缓存,因此返回的实体应始终反射(reflect)数据库中的最新值。
  • 无状态:由于ObjectContext不会跟踪实体,因此您可以继续对只读查询无限期地使用相同的ObjectContext实例,并且不必因有关存在短暂的ObjectContext而受到一般建议的约束。

  • 如果仅查询实体,AsNoTracking()是一个好主意。如果您需要更新它们,它将无法正常工作,那就是权衡。

    关于entity-framework - Entity Framework 中的AsNoTracking(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14527721/

    相关文章:

    c# - Entity Framework 级联删除 - FOREIGN KEY 约束

    c# - EF6 中的方法链接不输出正确的 SQL

    c# - 为什么域对象(PO​​CO)的成员定义为虚拟的?

    c# - Entity Framework 故意禁用自动增量

    c# - 将 .Net 实体数据模型与 SQLite 结合使用

    c# - 实体泛型 dbSet 获取数据表

    c# - 从生成的表中检索数据时对象名称 'dbo.TableName' 无效

    c# - SQLAzureExecutionStrategy ShouldRetryOn 未在 EF 异常上调用

    c# - Fluent Api - M :M relationship with two 1:M properties. 怎么样?

    C# - 没有用于 SqlMethods 的 Intellisense (Linq/EntityFramework)