代码之家  ›  专栏  ›  技术社区  ›  muruge

实体框架4-继承

  •  9
  • muruge  · 技术社区  · 15 年前

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

    我的数据库有两个表,结构如下:

    个人分类表:

    • 类别id(int)(身份)(PK)
    • 分类类型(nvarchar(50))

    • 人格化(int)(身份)(PK)
    • CategoryID(来自PersonCategory表的FK)
    • 姓名(nvarchar(50))
    • 描述(nvarchar(max))

    PersonCategory表有四个条目,每个条目代表一个类别-Student、CourseInstructor、Staff和Advisor。

    articles 在网上我想 将是适合此场景的模型。所以在EF4中,我创建了四个实体(Student、CourseInstructor、Staff和Advisor),每个实体都继承自Person表。然后,我将它们映射到Person表,并为每个表添加一个条件(例如CategoryID=1表示学生实体,CategoryID=2表示员工实体),以区别于其他实体。我还从Person表中删除了CategoryID属性,并使其成为抽象类。但是我得到了以下错误,因为我从Person表中删除了CategoryId属性。

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

    3 回复  |  直到 13 年前
        1
  •  5
  •   Ian Mercer    15 年前

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

    http://social.msdn.microsoft.com/Forums/en/adodotnetentityframework/thread/24380ee6-4753-46a2-a3ed-b1cb2e2d161c

    “关键点是将充当鉴别器的列不能映射到assocation,除非它以not null条件参与。”

        2
  •  0
  •   dnndeveloper    15 年前
        3
  •  0
  •   Luke Puplett    14 年前

    如果按类型查找表,则也不正确。使用PersonCategory表为派生类型的属性值提供数据时,只能有两种类型,base和derived。但是,这需要有作为外键的PersonID,而不是。

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

    卢克