使用 EF core Include 时排除已删除的子项

Ari*_*rif 1 linq entity-framework-core asp.net-core

这是我的实体结构:

在此输入图像描述
我获取包含所有子测试的课程的代码:

var course = await Db.Courses.Include(x => x.Tests).FirstOrDefaultAsync(y => y.CourseId == id);
Run Code Online (Sandbox Code Playgroud)

它包括与课程相关的所有子测试。但我想包括状态未删除的所有测试 ( )。为此,我使用了以下代码:IsDeleted = false

var course = await Db.Courses.Include(x => x.Tests.Where(y=>!y.IsDeleted)).FirstOrDefaultAsync(y => y.CourseId == id);
Run Code Online (Sandbox Code Playgroud)

但它并不排除已删除的测试。谁能告诉我如何排除已删除的测试?

Ari*_*rif 5

我得到了我的解决方案。我通过添加全局过滤器解决了这个问题,如下所示:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);

    builder.Entity<Test>().HasQueryFilter(p => !p.IsDeleted);
}
Run Code Online (Sandbox Code Playgroud)

详细解释看这里

  • 但是,如果您想要所有记录(包括 IsDeleted = true 的记录)怎么办?根据您链接的文档,在这种情况下您需要使用“IgnoreQueryFilters()”。您应该将自己的答案标记为已接受!+1 (3认同)