2

У меня есть два объекта в моем проекте Student и Teacher, которые имеют общий базовый класс, AccountModel. Базовый класс содержит свойства, которые необходимы как для студентов и преподавателей (семантически, и студенты, и преподаватели являются владельцами счетов, и для хорошей практики, это предотвращает нарушение DRY принципа)Fluent API Table Scaffolding - HasBaseType

В моем Fluent API конфигурации у меня есть :

builder 
    .Ignore<AccountModel>(); 

builder 
    .Entity<Student>() 
    .HasBaseType<AccountModel>() 
    .ToTable("Students"); 

builder 
    .Entity<Teacher>() 
    .HasBaseType<AccountModel>() 
    .ToTable("Teachers"); 

но когда EF каркасы миграции и создает новую базу данных, я получаю AccountModel таблицу, но не таблица Students или Teachers. Что дает?

+0

В соответствии с [документацией] (https://docs.microsoft.com/en-us/ef/core/modeling/relational/inheritance), в настоящее время EF Core поддерживает только шаблон TPH, поэтому вы получаете таблицу базы данных. Я понятия не имею, в чем цель 'HasBaseType'. –

+0

@IvanStoev, что такое шаблон TPH? – series0ne

+0

Отдельная таблица, содержащая все поля потомков плюс столбец «дискриминатор» :) –

ответ

2

В настоящее время ядро ​​Entity Framework поддерживает только шаблон таблицы на иерархию (TPH) для сопоставления наследования (http://www.learnentityframeworkcore.com/inheritance), поэтому результаты миграции приводятся в одной таблице для всех типов.

Table per concrete type (TPC) находится на отставании и активно рассматривается, как и шаблон Table Per Type (TPT).