在Entity Framework Core 2.0中包含派生子属性

san*_*ndy 6 entity-framework-core

使用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; }

    }
Run Code Online (Sandbox Code Playgroud)

以及以下配置:

    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);
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写以下查询:

        var result = this.serviceDbContext.ParentEntities
            .Include(p => p.Children)
            .ThenInclude((ChildEntityB b) => b.Children);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这导致语法错误.

但是,我相信我遵循https://github.com/aspnet/EntityFrameworkCore/commit/07afd7aa330da5b6d90d518da7375d8bbf676dfd中指定的语法

任何人都可以建议我做错了什么?

谢谢

Iva*_*oev 5

此功能在EFC 2.0中不可用.

它被跟踪为#3910查询:支持包含/ ThenInclude用于导出类型的导航,并根据当前的EFC 路线图,它被安排用于EFC 2.1版本(包含 我们已承诺完成的功能下的派生类型项目).