Entity framework core 在实体框架查询上放置AsNoTracking的位置?

Entity framework core 在实体框架查询上放置AsNoTracking的位置?,entity-framework-core,Entity Framework Core,我有以下实体框架核心2.2查询: IQueryable<Job> jobs = _context.Jobs.AsNoTracking(); jobs = jobs.Where(x => x.Active); jobs.Skip(offset).Take(limit); var result = jobs .Select(x => new { Id = x.Id, Country = new { Code = x.Country.Cod

我有以下实体框架核心2.2查询:

IQueryable<Job> jobs = _context.Jobs.AsNoTracking();

jobs = jobs.Where(x => x.Active);

jobs.Skip(offset).Take(limit);

var result = jobs
  .Select(x => new {
    Id = x.Id,
    Country = new {
      Code = x.Country.Code,
      Name = x.Country.Name
    },
    JobTypes = _context.JobTypes.Select(x => x.Name),
    Created = x.Created,
    Skills = x.JobSkills.Select(y => new {
      Id = y.Skill.Id,
      Name = y.Skill.Name
    })
  });

return await result.ToListAsync();
IQueryable作业=_context.jobs.AsNoTracking();
作业=作业。其中(x=>x.Active);
作业。跳过(偏移)。获取(限制);
var结果=作业
.选择(x=>new{
Id=x.Id,
国家=新{
代码=x.Country.Code,
Name=x.Country.Name
},
JobTypes=\u context.JobTypes.Select(x=>x.Name),
已创建=x.已创建,
Skills=x.JobSkills.选择(y=>new{
Id=y.Skill.Id,
Name=y.Skill.Name
})
});
返回等待结果。toListSync();
我使用AsNoTracking()来加快查询速度。问题是:

是否有放置AsNoTracking()的特定位置


我是否应该将其放在ToListSync之前而不是开始

这没关系——请看,我用以下内容更新了我的答案:JobTypes=\u context.JobTypes.Select(x=>x.Name),作为子查询。我需要在context.JobTypes之后添加AsNoTracking(),还是在_context.Jobs中添加就足够了?我可能会在ToListSync之前添加AsNoTracking,而这一个会同时处理这两个问题?不,你不需要它-开始的一个就足够了。正如我在链接答案中所写,跟踪是整个查询的属性,而不是
DbSet
。顺便说一句,因为您的查询使用的是投影,所以根本不需要
AsNoTracking
——跟踪只对返回实体的查询有效。谢谢您提供的信息。如果您添加文本作为答案,我会将其标记为答案。这无关紧要-请参阅我用以下内容更新了我的答案:JobTypes=\u context.JobTypes.Select(x=>x.Name),作为子查询。我需要在context.JobTypes之后添加AsNoTracking(),还是在_context.Jobs中添加就足够了?我可能会在ToListSync之前添加AsNoTracking,而这一个会同时处理这两个问题?不,你不需要它-开始的一个就足够了。正如我在链接答案中所写,跟踪是整个查询的属性,而不是
DbSet
。顺便说一句,因为您的查询使用的是投影,所以根本不需要
AsNoTracking
——跟踪只对返回实体的查询有效。谢谢您提供的信息。如果你添加文本作为答案,我会将其标记为答案。