У меня есть два 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