我正在使用Entity Framework作为我的数据库的ORM . 为了建模继承,我的数据库使用Table Per Type(aka Class Table Inheritance)模式 . 实体框架确实支持TPT继承 . 然而它非常慢 . 它为最简单的linq查询生成非常复杂的选择查询 . (请参阅此post)有关数据库中继承的背景知识,这里有关于不同类型的继承模式的nice post .
作为替代方案,我的数据库使用TPT模式的变体,其包括当前对象的子类型 . 这是关于这个post的建议 . 包含子类型应该可以进行更简单的查询,因为您知道要加入哪个子表 .
Question: 有没有办法告诉实体框架了解以下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)
)