Помогите решить проблему с EF и наследованием TPH.
Есть студенты и группы(академические, подгруппы и тд.). Студент может быть только в одной академической группе и в нескольких подгруппах.
У меня получилась следующая иерархия:
public class Student
{
public int Id { get; set; }
public required string Name { get; set; }
public int AcademicGroupId { get; set; }
public AcademicGroup? AcademicGroup { get; set; }
public IEnumerable<SubGroup>? SubGroups { get; set; }
}
public abstract class Group
{
public int Id { get; set; }
public required string Title { get; set; }
public abstract ICollection<Student>? Students { get; set; }
}
public class AcademicGroup : Group
{
// some custom properties.
public override ICollection<Student>? Students { get; set; }
}
public class SubGroup : Group
{
// some custom properties.
public override ICollection<Student>? Students { get; set; }
}
Настройка DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
// Group configuration.
// Academic. One-to-Many
modelBuilder.Entity<AcademicGroup>()
.HasMany(e => e.Students)
.WithOne(e => e.AcademicGroup)
.HasForeignKey(e => e.AcademicGroupId);
// SubGroup. Many-to-Many
modelBuilder.Entity<SubGroup>()
.HasMany(e => e.Students)
.WithMany(e => e.SubGroups);
base.OnModelCreating(modelBuilder);
}
С запросами типа таких все ок:
await _ctx.AcademicGroups
.Include(g => g.Students)
.ToListAsync(cancellationToken);
await _ctx.SubGroups
.Include(g => g.Students)
.ToListAsync(cancellationToken);
Но когда пытаюсь заинклюдить студентов через базовую сущность группы(Group), то получаю исключение:
await _ctx.Groups
.Include(g => g.Students)
.ToListAsync(cancellationToken);
System.InvalidOperationException: The expression 'g.Students' is invalid inside an 'Include' operation, since it does not represent a property access: 't => t.MyProperty'. To target navigations declared on derived types, us
e casting ('t => ((Derived)t).MyProperty') or the 'as' operator ('t => (t as Derived).MyProperty').
Можно ли как-то вытащить все группы со студентами вне зависимости от типа группы?