我不知道是否应该如此,但我认为这很奇怪,因为更改了查询结果。
当我执行下面的查询时,我得到的实体只有 2 个“Mensagens”实体,因为我只过滤活动实体,所以这是正确的,我的数据库上有 2 个活动实体和 1 个非活动实体。
return await context.Lancamentos
.Include(x => x.UsuarioCriacao)
.Include(x => x.Mensagens.Where(m => m.Ativo))
.ThenInclude(m => m.MensagemMedias)
.ThenInclude(m => m.MediaWhatsapp)
.ThenInclude(m => m.TipoMediaWhatsapp)
.Include(x => x.Mensagens.Where(m => m.Ativo))
.ThenInclude(x => x.TemplateMensagem)
.ThenInclude(t => t.Medias)
.ThenInclude(m => m.MediaWhatsapp)
.ThenInclude(m => m.TipoMediaWhatsapp)
.AsNoTracking()
.FirstOrDefaultAsync(l => l.Id == id && l.Ativo);
Run Code Online (Sandbox Code Playgroud)
但是,如果我执行完全相同的命令,只是删除该AsNoTracking()行,它就会给我 3 条记录,包括活动的和非活动的。
但非活动的 EF 不会获取ThenInclude以下内容。它改变了行为。
它根据AsNoTracking我使用的过滤器过滤数据Include
如果没有AsNoTracking它,它会给我带来所有数据,但它会过滤是否会加载对象ThenInclude。
有谁知道这是否是正常行为以及为什么会这样?