如何在EF中使用继承

时间:2011-05-27 05:34:30

标签: entity-framework entity

我正在使用EF 4.0,我有一个问题

DB中的表结构是:

Table: Setting--->
                     Name (PK)
                     GroupBy
                     DataType

Table: UserSetting-->
                     SettingName(PK)(FK)
                     UserName(PK)(FK)
                     Value

Table: WorkstationSetting-->
                     SettingName(PK)(FK)
                     WorkstationName(PK)(FK)
                     Value

现在我想利用继承,因为WorkstationSetting和UserSetting继承了设置,所以任何建议如何实现继承,我试过但是我得到了错误

"Error  39  Error 3003: Problem in mapping fragments starting at line 1621:All the key properties (Settings.Name) of the EntitySet Settings must be mapped to all the key properties (WorkstationSetting.SettingName, WorkstationSetting.WorkstationName) of table WorkstationSetting.

2 个答案:

答案 0 :(得分:1)

我看到你在UserSetting和WorkstationSetting中有一个复合PK。 如果UserSetting和WorkstationSetting是从Setting中派生的,则它们的名称应为PK。

另一个评论;一般来说,不建议使用名称或“有意义”的东西作为PK,因为它的可扩展性较低,可能会导致限制(即最大索引大小)。请改为使用int或uniqueidentifier。

我建议你引入一个新字段,即SettingId,它应该被添加到所有三个表中。在EF设计器中,只需添加继承。

答案 1 :(得分:0)

查看每个类型继承的表。例如,查看here。它应该可以帮助你开始。我们的想法是,每个具体类型都有一个表(如您所示),并将其映射到对象层次结构。

也许你的问题在于钥匙。你的映射是如何定义的? DB中定义的表之间的关联是什么?