EF Core TPH Discriminator игнорирует базовые объекты - PullRequest
0 голосов
/ 09 марта 2019

У меня есть два DbContext. A BaseDbContext и тот, который наследуется от BaseDbContext с именем FemaleDbContext.

public class BaseDbContext : DbContext
{
    public BaseDbContext(DbContextOptions options) : base(options) { }

    public virtual DbSet<Person> Person { get; set; }
    public virtual DbSet<House> House { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>().ToTable("Person", "dbo");
        modelBuilder.Entity<House>().ToTable("House", "dbo");

        modelBuilder.Entity<Person>().HasOne(e => e.House).WithMany(e => e.Persons);
        modelBuilder.Entity<House>().HasMany(e => e.Persons).WithOne(e => e.House);
    }
}

Цель состоит в том, чтобы расширить сущность Person другим свойством. Я не хочу использовать теневые свойства, потому что это слишком динамично. Поэтому я пытаюсь заставить его работать, используя TPH. Вот мой другой контекст:

public class FemaleDbContext : BaseDbContext
{
    public DbSet<Female> Female { get; set; }

    public FemaleDbContext(DbContextOptions<FemaleDbContext> options) : base(options) { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Female>().HasBaseType<Person>();

        base.OnModelCreating(modelBuilder);
    }
}

Как видите, мой субконтекст должен использовать сущность Female вместо Person. Проблема в том, что когда я запускаю this.Context.Female.ToList() на моем SubDbContext, возвращаются только сущности со значением Female внутри поля Discriminator внутри моей базы данных. Объекты со значением Person в этой таблице возвращаются. Но я хочу получить каждую сущность.

Также, вот мои сущности:

public class Person
{
    public int Id { get; set; }
    public string Firstname { get; set; }
    public string Middlename { get; set; }
    public string Lastname { get; set; }
}

public class Female : Person
{
    public bool? IsPregnant { get; set; }
}

Как мне настроить мой DbContext, чтобы this.Context.Female.ToList() возвращал как Females, так и Persons. Обратите внимание, что this.Context.Person.ToList() уже возвращает все, не только Persons

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...