2

我正在使用实体框架作为我的数据库的 ORM。为了对继承建模,我的数据库使用 Table Per Type(又名 Class Table Inheritance)模式。实体框架确实支持 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)
)
4

0 回答 0