小编Rai*_*iiy的帖子

使用 AsNoTracking 过滤 Include 时出现奇怪的行为

我不知道是否应该如此,但我认为这很奇怪,因为更改了查询结果。

当我执行下面的查询时,我得到的实体只有 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。

有谁知道这是否是正常行为以及为什么会这样?

c# entity-framework-core .net-core

5
推荐指数
1
解决办法
523
查看次数

标签 统计

.net-core ×1

c# ×1

entity-framework-core ×1