【发布时间】:2013-07-05 09:01:20
【问题描述】:
我正在尝试添加一个我最初没有的关联。我意识到两个表在技术上是相关的,并且一些导航属性可能会简化我原本必须手动执行的操作。表及其键如下所示:
Import
Primary Key:
Number : Int32
Date : DateTime
Hour
Primary Key:
DepartmentID : Int32
UserNumber : Int32
Date : DateTime
该关联名为 ImportHour。 Import.Number 映射到 Hour.UserNumber,Import.Date 映射到 Hour.Date。我正在尝试在 Import 上添加一个 0..1 的关联,在 Hour 上添加一个带有导航属性且没有其他外键的 * 关联。当我这样做时,设计师告诉我关联没有映射。如果我随后生成 DDL,它会创建新字段 Hours.Import_Date 和 Hours.Import_Number(Hours 是 Hour 实体的实际数据库表名)。如果我手动映射字段,我最终会出现以下错误:
Error 3021: Problem in mapping fragments starting at line 332:
Each of the following columns in table Hours is mapped to multiple conceptual side properties:
Hours.Date is mapped to <ImportHour.Hour.Date, ImportHour.Import.Date>
Hours.UserNumber is mapped to <ImportHour.Hour.UserNumber, ImportHour.Import.Number>*
我不太确定发生了什么,而且我认为我对“映射”过程的理解不足以弄清楚这一点。它几乎似乎想要一个五元组键,而不是意识到一个键映射到另一个键。我查看了我的其他一对多关联,它们甚至没有表映射;我认为它们具有引用约束,但您显然不能具有 0..1 到多关联的引用约束。
【问题讨论】:
-
您是如何创建实体对象的?您是否对实体对象进行了任何自定义?如果没有,作为最后的努力,只需重建对象(我假设您在 VS 中使用了模板)。如果您生成 POCO 支持,然后将 POCO 实体从 ObjectContext 拆分为单独的库,则可能会出现问题。
-
我使用设计器构建了实体对象,然后使用“从模型生成数据库”生成了一个 .sql 文件,我执行该文件来创建数据库。我没有添加任何自定义。
-
我似乎已经通过选择一对多关联来“修复”它,并使用我预先存在的列进行引用约束。不知道如果我尝试加载没有匹配导入值的小时值会发生什么。
标签: entity-framework-4 mapping entity-relationship