C# 当只返回字段时,使用AsNoTracking()是否会有所不同?

C# 当只返回字段时,使用AsNoTracking()是否会有所不同?,c#,linq,entity-framework,C#,Linq,Entity Framework,所以我读了很多关于在EF中执行查询时使用AsNoTracking()的内容,特别是当它返回实体时,如果您不想更新,就不要保留对事物的引用 但我也读过AsNoTracking也可能加快查询本身的速度,因为EF不必将每个查询的项目映射到映射中的实体 问题是,如果我的Linq查询只是从列/行返回值,而不是从实体类型返回值,那么使用AsNoTracking()是否有助于加快查询速度?如果不是很明显,我不应该使用它,因为它会使代码混乱 示例1(我希望使用AsNoTracking(): 示例2(我的问题…我

所以我读了很多关于在EF中执行查询时使用AsNoTracking()的内容,特别是当它返回实体时,如果您不想更新,就不要保留对事物的引用

但我也读过AsNoTracking也可能加快查询本身的速度,因为EF不必将每个查询的项目映射到映射中的实体

问题是,如果我的Linq查询只是从列/行返回值,而不是从实体类型返回值,那么使用AsNoTracking()是否有助于加快查询速度?如果不是很明显,我不应该使用它,因为它会使代码混乱

示例1(我希望使用AsNoTracking():

示例2(我的问题…我认为在这里使用它没有意义,但我不知道答案):

var result = (from p in context.Pogs.AsNoTracking()
              select p.Name);

不,不会,因为不会加载实体,通过检查
context.Pogs.Local
可以证明这一点,该文件不包含通过LINQ检索属性的实体


您可以检查正在跟踪的实体。因此,如果您通过
context.ChangeTracker.entries()检索POG
DbSet
的跟踪器条目
您将看到,对于第一个示例,有跟踪相应实体的条目,而对于第二个示例,则没有条目。

谢谢。关于如何观察跟踪的更改的有用信息。我以前不知道这一点。
var result = (from p in context.Pogs
              select p.Name);  // assuming p.Name is a string or something
var result = (from p in context.Pogs.AsNoTracking()
              select p.Name);