我有这样的数据库结构:
create table Person (
ID bigint identity not null,
FirstName varchar(100),
LastName varchar(100),
-- etc... lot's of generic fields that apply to a person, e.g. phone, address
)
create table Teacher (
ID bigint identity not null,
PersonID bigint not null,
EmploymentDate date,
-- plus a bunch of other teacher-specific fields
)
create table Student (
ID bigint identity not null,
PersonID bigint not null,
EnrollmentDate date,
-- plus a bunch of student-specific fields
)
create table SystemUser (
ID bigint identity not null,
PersonID bigint not null,
UserName varchar(50) not null,
-- plus any user specific fields
)
Person
与所有其他字段之间的关系为1 - > 0:1,Person
的每个“子类”在PersonID
上都有唯一键。 SystemUser
可以与Teacher
或Student
相同;事实上,你可以想象一个人都是三个人。
现在,我想让EF实体代表Teacher
,Student
和SystemUser
,每个实体都要实际继承自Person
(一等奖),或者至少包含类中的Person
字段,隐式映射到两个基础表。
我在网上找到了很多他们共享相同主键的示例,但没有他们共享相同主键的情况,即派生表上的PersonID
映射到ID
上Person
表。
你是怎么做到的?
答案 0 :(得分:1)
事实上,你可以想象一个人都是三个人。
如果这是您的要求,则不得将人员与其他课程一起映射。您还必须拥有单独的Person
类和单独的PersonDetail
类,其中PersonDetail
可以派生Student
,Teacher
和SystemUser
类与TPT继承映射。您必须将Person
和PersonDetail
之间的关系映射为一对多才能支持该要求。
您使用继承映射人员的模型将具有此属性
Person
将为Student
,Teacher
或SystemUser
Person
记录的作用无法更改 - 这意味着Student
始终为Student
,如果没有先删除,则无法将其更改为Teacher
Person/Student
并创建新的Person/Teacher
。