【问题标题】:AsNoTracking unnecessary in ToDictionary?ToDictionary 中不需要 AsNoTracking?
【发布时间】:2020-10-21 01:49:39
【问题描述】:

我读到here,当您只选择表格的一些列时,“AsNoTracking”是不必要的,因为只能跟踪整个实体。

示例: 如果 Table 有 4 列(Id、Col1、Col2 和 Col3),则完全一样

context
  .AsNoTracking()
  .Select(x => new {x.Id, x.Col1})
  .ToList();

context
  .Select(x => new {x.Id, x.Col1})
  .ToList();

所以:AsNoTracking 是多余的。

我想知道当您执行“ToDictionary”时是否会发生同样的情况。如果我这样做:

context
  .ToDictionary(x => x.Id);

是否正在跟踪元素?

另外,我想如果我执行ToDictionary(x => x.Id, new {x.Id, x.Col1}); 之类的操作,将不会因为与以前相同的原因而被跟踪……对吧?

谢谢!

【问题讨论】:

    标签: entity-framework-core ef-core-3.1


    【解决方案1】:

    AsNoTracking 会跟踪您是否修改了数据,以便您稍后可以调用 SaveChanges。选择表的子集并不意味着您不能将数据添加到结果中,因此将其设置为 NoTracking 有助于减少开销。

    【讨论】:

    • 我读到当你选择某些字段时,实体没有被跟踪:stackoverflow.com/questions/21704224/…
    • 好的,我看到我的写作很混乱。子集我的意思是“一些列”,而不是“一些元素”。我修好了……
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多