Usando Entity Framework Core 2.0, sto cercando di costruire una query per includere i dati correlati per un'entità figlio polimorfa.
Ad esempio, dato i seguenti tipi:
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; }
}
e la seguente configurazione:
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);
}
Sto cercando di scrivere la seguente query:
var result = this.serviceDbContext.ParentEntities
.Include(p => p.Children)
.ThenInclude((ChildEntityB b) => b.Children);
Sfortunatamente, questo si traduce in un errore di sintassi.
Tuttavia, credo di seguire la sintassi come specificato in https://github.com/aspnet/EntityFrameworkCore/commit/07afd7aa330da5b6d90d518da7375d8bbf676dfd
Qualcuno può suggerire cosa sto sbagliando?
Grazie
Questa funzionalità non è disponibile in EFC 2.0.
È stato tracciato come # 3910 Query: Support Include / ThenInclude per la navigazione su tipo derivato e in base all'attuale Roadmap EFC, è pianificato per la versione 2.1 di EFC ( Include per i tipi derivati in Funzioni che ci siamo impegnati a completare ).