Спасибо Иван. Был очень полезным.

ьзуя Entity Framework Core 2.0, я пытаюсь создать запрос для включения связанных данных для полиморфной дочерней сущности.

Например, даны следующие типы:

    public class ParentEntity
    {
        public int Id { get; set; }

        public IList<ChildEntityBase> Children { get; set; }
    }

    public abstract class ChildEntityBase
    {
        public int Id { get; set; }
    }

    public class ChildEntityA : ChildEntityBase
    {
    }

    public class ChildEntityB : ChildEntityBase
    {
        public IList<GrandchildEntity> Children { get; set; }
    }

    public class GrandchildEntity
    {
        public int Id { get; set; }

    }

и следующая конфигурация:

    public DbSet<ParentEntity> ParentEntities { get; set; }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<ParentEntity>().HasKey(p => p.Id);
        builder.Entity<ParentEntity>().HasMany(p => p.Children).WithOne();

        builder.Entity<ChildEntityBase>().HasKey(c => c.Id);
        builder.Entity<ChildEntityBase>()
            .HasDiscriminator<string>("ChildEntityType")
            .HasValue<ChildEntityA>("a")
            .HasValue<ChildEntityB>("b");

        builder.Entity<ChildEntityA>()
            .HasBaseType<ChildEntityBase>();

        builder.Entity<ChildEntityB>()
            .HasBaseType<ChildEntityBase>()
            .HasMany(u => u.Children).WithOne();

        builder.Entity<GrandchildEntity>()
            .HasBaseType<ChildEntityBase>();

        base.OnModelCreating(builder);
    }

Я пытаюсь написать следующий запрос:

        var result = this.serviceDbContext.ParentEntities
            .Include(p => p.Children)
            .ThenInclude((ChildEntityB b) => b.Children);

К сожалению, это приводит к синтаксической ошибке.

Тем не менее, я считаю, что я следую синтаксису, указанному вhttps://github.com/aspnet/EntityFrameworkCore/commit/07afd7aa330da5b6d90d518da7375d8bbf676dfd

Может кто-нибудь подсказать, что я делаю не так?

Спасибо

Ответы на вопрос(1)

Решение Вопроса

Это было отслежено как# 3910 Запрос: поддержка Include / ThenInclude для навигации по производному типу и в соответствии с текущим EFCДорожная картазапланирован выпуск EFC 2.1 (Включить для производных типов пункт подФункции, которые мы обязались завершить).

 sandy06 сент. 2017 г., 16:12
Спасибо Иван. Был очень полезным.
 sandy06 сент. 2017 г., 16:04
Это объяснило бы это. Есть ли альтернативный подход, который я могу использовать для ThenInclude соответствующим образом для полиморфных дочерних типов?
 Ivan Stoev06 сент. 2017 г., 16:11
Нет, это проблема :( Пока они не предоставят это, вы должны будете сделать это вручную (в основном используя явную загрузку) - какВот, Но нет обходного пути без материализации запроса.

Ваш ответ на вопрос