【问题标题】:Effect on AsNoTracking when mapping entities to DTO将实体映射到 DTO 时对 AsNoTracking 的影响
【发布时间】:2019-07-31 05:02:15
【问题描述】:

在将 EF 结果映射到 DTO 时,在 EF 查询中添加 AsNoTracking 对性能有影响吗?

例如。

_context.Students.Where(x => x.age > 15).AsEnumerable().Select(x => ToDTO(x)).ToList();

对比

_context.Students.Where(x => x.age > 15).AsNoTracking().AsEnumerable().Select(x => ToDTO(x)).ToList();

【问题讨论】:

  • 我怀疑它是否有效 - EF 如何将 ToDTO 转换为 SQL?但是,AsNoTracking 不会有任何效果,因为您返回 DTO 而不是实际上下文的类,EF 无法跟踪 DTO。
  • @SlavaUtesinov:这里的问题是 AsEnumerable() 方法,它实现了实体,因此上下文将设置更改跟踪。这意味着不必要的开销。
  • 类似讨论here。您可以将您的问题标记为该问题的重复。

标签: .net entity-framework linq-to-sql ef-core-2.2


【解决方案1】:

是的,它会生效。到目前为止,查询是通过AsEnumerable() 方法实现的,并将为返回的每个实体设置更改跟踪,因此会有开销。

一般而言,如果您查询数据并将其仅用于只读目的,则禁用跟踪是合理的。

Tracking vs. No-Tracking Queries

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2021-12-31
    • 1970-01-01
    • 2022-01-02
    • 2017-09-17
    • 1970-01-01
    相关资源
    最近更新 更多