2

我有一个这样的数据库结构:

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。ASystemUser可能与 aTeacher或 a是同一个人Student;事实上,你可以想象有一个三者兼备的人。

现在,我想让 EF 实体表示和Teacher,每个实体要么实际上继承自(一等奖),要么至少包含类中的字段,隐式映射到两个基础表。StudentSystemUserPersonPerson

我在网上找到了很多他们共享相同主键的例子,但没有一个他们不共享相同主键的例子,即PersonID在派生表上映射到表IDPerson

你是怎么做到的?

4

1 回答 1

1

事实上,你可以想象有一个三者兼备的人。

如果这是您的要求,则不得将人员与其他类一起映射。您仍然必须有单独的Person类和可以派生的单独PersonDetail类,以及使用 TPT 继承映射的类。您必须将和之间的关系映射为一对多以支持该要求。PersonDetailStudentTeacherSystemUserPersonPersonDetail

一个你映射的人继承你的模型将有这个属性

  • 一个Person将是StudentTeacherSystemUser
  • 如果您确实有一个真实的人担任多个角色,那么您的数据库中需要为每个角色提供多个 Person 记录 - 每个都有其唯一的主键
  • 现有Person记录的角色不能改变 - 这意味着Student永远Student不会改变,例如在Teacher不先删除Person/Student和创建新记录的情况下不能改变Person/Teacher
于 2012-10-21T16:00:04.947 回答