2017-09-06 10 views
3

Entity Frameworkコア2.0を使用して、多態性の子エンティティに関連するデータを含めるクエリを作成しようとしています。例えばEntity Frameworkコア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; } 

    } 

と、次の構成:この、残念ながら

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

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); 
    } 

私は次のクエリを記述しようとしています構文エラーが発生しています。

しかし、私は、誰もが私が間違ってやってお勧めできますhttps://github.com/aspnet/EntityFrameworkCore/commit/07afd7aa330da5b6d90d518da7375d8bbf676dfd

に指定されている私は、構文を次のです信じますか?

ありがとうございました

答えて

3

この機能はEFC 2.0では使用できません。

それは#3910 Query: Support Include/ThenInclude for navigation on derived typeとして追跡されます、現在EFC Roadmapによれば、EFC 2.1リリース( Features we have committed to complete下派生型項目が挙げられる)のためにスケジュールされます。

+0

それはそれを説明するでしょう。私がThen Then Multiquic Child Typesに適切にインクルードするために使用できる代替アプローチがありますか? – sandy

+0

いいえ、それは問題です:(それらが提供されるまで、あなたは手作業で(基本的には明示的な読み込みを使用して)行う必要があります - [here](https://stackoverflow.com/questions/42704826/entity-framework-core-to -include-different-properties-from-subclasses/42705673#42705673)しかし、問合せを行うことなく、回避策はありません。 –

+0

ありがとうございました。 – sandy

関連する問題