Entity Framework 4 - 继承

9
我正在尝试理解EF4中的继承映射。
我的数据库有两个表,其结构如下:
PersonCategory表:
- CategoryID(int)(identity)(PK) - CategoryType(nvarchar(50))
Person表:
- PersonID(int)(identity)(PK) - CategoryID(来自PersonCategory表的FK) - Name(nvarchar(50)) - Description(nvarchar(max))
PersonCategory表有四个条目,分别代表以下类别-学生、课程导师、工作人员和顾问。
阅读了在线文章后,我认为Table Per Hierarchy是适合这种情况的模型。因此,在EF4中,我创建了四个实体(Student、CourseInstructor、Staff和Advisor),每个实体都继承自Person表。然后,我将它们中的每一个映射到Person表,并添加了一个条件(例如,对于Student实体,CategoryID = 1,对于Staff实体,CategoryID = 2)来区分其他实体。我还从Person表中删除了CategoryID属性,并将其变成了抽象类。但是,由于我删除了Person表中的CategoryId属性,所以出现了以下错误。

错误3015:从表Person(CategoryID)到表PersonCategory(CategoryID)的外键约束FK_Person_PersonCategory::映射片段起始处存在问题:映射不足:外键必须映射到在概念侧参与外键关联的某些AssociationSet或EntitySets。

Table Per Hierarchy是适合这种情况的模型吗?如果不是,那么我应该如何处理EF4中的这种情况?

3个回答

5

谢谢指点。我理解了所解释的要点。那么,我应该理解为EF4无法处理这种情况吗?因为在我的应用程序实体模型中,我希望两个表都存在关联。我该如何处理这种情况? - muruge

0

0
对于Table-per-Hierarchy,单个表包含所有类型的列。你有两个表,所以我立即怀疑。
如果采用Table-per-Type,那也不对。你只能有两种类型,基本和派生,PersonCategory表提供派生类型属性值的数据。但是,这需要将PersonID作为外键,而它并没有。
个人认为,你不必将实体不必要地分成不同的类型。你可以将两个表中的所有列映射到一个实体中,或者如果可能的话,更改数据库模式以更好地满足你的需求。
我建议使用空测试数据库进行TPT和TPH模型设计,并查看EF为所需设置构建的模式。
卢克

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接