【问题标题】:AsNoTracking using LINQ Query syntax instead of Method syntaxAsNoTracking 使用 LINQ 查询语法而不是方法语法
【发布时间】:2013-08-09 23:18:15
【问题描述】:

我有兴趣将AsNoTracking 与我的 LINQ 选择查询一起使用以提高性能。我正在使用带有 Code First 的实体框架 5。

但是,我的所有查询都是使用 LINQ 查询语法编写的,并且所有 AsNoTracking 示例都使用方法语法显示。我知道 AsNoTracking 是为 Method 语法创建的,但我如何使用 Query 语法实现相同的功能?

【问题讨论】:

  • AsNoTracking 不会提高性能,因为它允许 EF 在每次调用时联系数据源。因此,跟踪也是缓存并提高了性能。
  • 嗨罗伯特,这很有趣,因为我已经阅读了很多文章指出 AsNoTracking() 在使用 SELECT 时无需进行任何更新即可提高性能。即blog.staticvoid.co.nz/2012/4/2/…
  • 好的,准确地说:AsNoTracking 在获取之前未获取的数据时确实更快,因为它不需要检查所需的数据是否已经存在(这将是最快的,当然)。

标签: c# linq entity-framework ef-code-first


【解决方案1】:

您将AsNoTracking() 应用于DbSet

var result = (
    from person in ctx.People.AsNoTracking()
    select person)
    .ToList();

【讨论】:

  • 有效,但我必须添加using Microsoft.EntityFrameworkCore;
  • 加入呢?您是否也将它们应用于这些集合?例如:from s in _context.Strategy.AsNoTracking() join sv in _context.StrategyVersion.AsNoTracking() on s.Id equals sv.StrategyId
  • this答案
【解决方案2】:

查询语法被编译器替换为方法语法,所以最后完全没有区别。

【讨论】:

  • 我已经尝试将 AsNoTracking() 与我的 Query 语法一起使用,但它甚至没有显示在 Intellisense 上。
  • 进一步思考,也许我没有正确使用它或者我缺少一个库?即 var result = (from person in ctx.People select person).AsNoTracking().ToList()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多