Наследование TPT Entity Framework с колонкой дискриминатора ObjectType

Я использую Entity Framework в качестве ORM для моей базы данных. Для моделирования наследования в моей базе данных используется шаблон "Таблица по типу" (он же "наследование таблиц классов"). Entity Framework поддерживает наследование TPT. Однако это очень медленно. Он генерирует очень сложные запросы на выборку для самых простых запросов linq. (см. этот пост) Для получения справочной информации о наследовании в базах данных, вот хороший пост о различных типах наследования.

В качестве альтернативы моя база данных использует вариант шаблона TPT, который включает тип дочернего объекта, которым является текущий объект. Это следует за предложениями на этот пост. Включение типа потомка должно делать более простые запросы, так как вы знаете, к какой дочерней таблице нужно присоединиться.

Вопрос: есть ли способ сказать Entity Framework, чтобы он понимал следующий шаблон TPT и делал более лаконичные запросы на выборку соответственно? Во-вторых, можно ли скрыть столбец типа от ORM и отображать его только в базе данных?

Возьмите следующий пример:

Родительская таблица:

create table People 
( 
    PersonID int primary key, 
    PersonTypeID int references PersonType(PersonTypeID),
    Name varchar(10) 
    constraint People_AltPK unique (PersonID,PersonTypeID)
)

Детские столы:

create table Students 
(
    PersonID int primary key,
    PersonTypeID as 1 persisted, -- student 
    EnrollmentDate datetime,
    foreign key (PersonID, PersonTypeID) references People(PersonID, PersonTypeID) 
 ) 

 create table Teachers 
 (
    PersonID int primary key,
    PersonTypeID as 2 persisted, -- teacher
    HireDate datetime, 
    foreign key (PersonID, PersonTypeID) references People(PersonID, PersonTypeID) 
 )

create table Parents (
    PersonID int primary key,
    PersonTypeID as 3 persisted, -- parents 
    DifficultyScore int,
    foreign key (PersonID, PersonTypeID) references People(PersonID, PersonTypeID)
)

0 ответов

Другие вопросы по тегам