我正在使用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.
答案 0 :(得分:1)
我看到你在UserSetting和WorkstationSetting中有一个复合PK。 如果UserSetting和WorkstationSetting是从Setting中派生的,则它们的名称应为PK。
另一个评论;一般来说,不建议使用名称或“有意义”的东西作为PK,因为它的可扩展性较低,可能会导致限制(即最大索引大小)。请改为使用int或uniqueidentifier。
我建议你引入一个新字段,即SettingId,它应该被添加到所有三个表中。在EF设计器中,只需添加继承。
答案 1 :(得分:0)
查看每个类型继承的表。例如,查看here。它应该可以帮助你开始。我们的想法是,每个具体类型都有一个表(如您所示),并将其映射到对象层次结构。
也许你的问题在于钥匙。你的映射是如何定义的? DB中定义的表之间的关联是什么?