Исключить удаленного потомка при использовании EF core Include - PullRequest
1 голос
/ 20 января 2020

Вот моя структура сущности:

enter image description here Мой код для получения курсов со всеми детьми тестов :

var course = await Db.Courses.Include(x => x.Tests).FirstOrDefaultAsync(y => y.CourseId == id);

Включает всех детей тестов , связанных с Курсы . Но я хочу включить все тесты, чтобы статус не удалялся (IsDeleted = false). Для этого я использую этот код:

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

Но это не исключает удаленных тестов. Кто-нибудь может сказать мне, как я могу исключить удаленные тесты?

Ответы [ 3 ]

1 голос
/ 20 января 2020

Я получил свое решение. Я решил это, добавив глобальный фильтр, как показано ниже:

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

    builder.Entity<Test>().HasQueryFilter(p => !p.IsDeleted);
}

Подробности объяснения здесь

0 голосов
/ 20 января 2020

Вы не можете выполнить фильтрацию в Включить в ядро ​​EF, попробуйте использовать приведенный ниже код

var course = await Db.Courses.Include(x => x.Tests).FirstOrDefaultAsync(y => y.CourseId == id);
course.Tests = course.Tests.Where(t => !t.IsDeleted).ToList();

См. Фильтрация по Включить в EF Core

0 голосов
/ 20 января 2020

Обычное включение не может работать с фильтром. Вам нужно скачать Z.EntityFramework.Plus.EFCore из nuget. И используйте код ниже

var course = await Db.Courses.Where(y => y.CourseId == id).IncludeFilter(x => x.Tests.Where(y => y.IsDeleted == false)).FirstOrDefaultAsync;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...