.net 实体框架4-继承

.net 实体框架4-继承,.net,inheritance,entity-framework-4,hierarchy,table-per-hierarchy,.net,Inheritance,Entity Framework 4,Hierarchy,Table Per Hierarchy,我试图理解EF4中的继承映射 我的数据库有两个具有以下结构的表: 个人分类表: 类别ID(内部)(标识)(主键) 类别类型(nvarchar(50)) 人员表 个人识别码(内部)(身份)(主键) CategoryID(来自PersonCategory表的FK) 姓名(nvarchar(50)) 说明(nvarchar(最大值)) PersonCategory表有四个条目,每个条目代表一个类别-学生、课程讲师、教职员工和导师 通过在线阅读,我认为每个层次的表将是适合这种情况的模型。所以在E

我试图理解EF4中的继承映射

我的数据库有两个具有以下结构的表:

个人分类表:

  • 类别ID(内部)(标识)(主键)
  • 类别类型(nvarchar(50))
人员表

  • 个人识别码(内部)(身份)(主键)
  • CategoryID(来自PersonCategory表的FK)
  • 姓名(nvarchar(50))
  • 说明(nvarchar(最大值))
PersonCategory表有四个条目,每个条目代表一个类别-学生、课程讲师、教职员工和导师

通过在线阅读,我认为每个层次的将是适合这种情况的模型。所以在EF4中,我创建了四个实体(学生、课程讲师、教职员工和导师),每个实体都继承自Person表。然后,我将它们映射到Person表,并为每个表添加了一个条件(例如,对于学生实体,CategoryID=1,对于职员实体,CategoryID=2),以区别于其他表。我还从Person表中删除了CategoryID属性,并使其成为抽象类。但我得到以下错误,因为我从Person表中删除了CategoryId属性

错误3015:映射从第101、108、114、120、126、133行开始的片段时出现问题:外键约束“FK_Person_PersonCategory”从表Person(CategoryID)映射到表PersonCategory(CategoryID)::映射不足:外键必须映射到概念端参与外键关联的某些AssociationSet或EntitySet


每个层次结构的表是否适合此场景?如果没有,那么我应该如何在EF4中处理这个场景?

在关联中使用鉴别器列是有问题的。见:-


“关键点是充当鉴别器的列不能映射到关联,除非它在非空条件下参与。”

我认为您真正想要的是每种类型的表

对于每个层次结构的表,单个表包含所有类型的所有列。你有两张桌子,所以我马上怀疑

如果选择每种类型的表,那么它也不正确。在PersonCategory表为派生类型的属性值提供数据的情况下,只能有两种类型:base和derived。但是,这需要将PersonID作为外键,而不是

就个人而言,我认为你不必要地将你的实体分割成不同的类型。您可以将两个表中的所有列映射到一个实体,或者如果可能,更改数据库模式以更好地满足您的需要

我建议使用一个空的测试数据库,首先进行TPT和TPH模型设计,然后查看EF为所需设置构建的模式


卢克

谢谢你的指点。我理解所解释的要点。我是否应该将其解释为EF4无法处理这种情况?因为在应用程序的实体模型中,我希望两个表都具有关联。我将如何处理这种情况?