#entity-framework-core
#entity-framework-core
Вопрос:
У меня есть два DbContext. 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
Комментарии:
1. Вы не можете. EF предоставляет вам именно то, что вы просите при выполнении
this.Context.Female.ToList()
. Предположим, что это не так, как бы вы хотели запрашивать только женщин?2. @user2877820 Используйте,
Context.Person
если вы хотите получить всеPerson
. Используйте,Context.Female
если вы хотите получить всеFemale
.