在EF4中映射片段的问题

时间:2010-11-02 17:25:56

标签: entity-framework entity-framework-4

我有以下型号:

alt text

但是当我用VS2010编译时,我收到以下错误:

错误2错误3007:从第1784行,第2018行开始映射片段时出现问题:列[createdby]正在两个片段中映射到不同的概念侧属性。

我想要什么?实际上我希望Note实体具有FK到User实体。 错误何时出现?当我添加FK用户注意我有错误。如果我删除链接,没问题。 问题是什么 ? 谢谢 约翰

2 个答案:

答案 0 :(得分:2)

我还有一个“User”实体(基于View)和几个带有CreatedByUser和ModifiedByUser引用的表。

这对我有用而不会出现“必须为空”错误:

  • 在“注释”实体上:右键单击:“添加>协会......”。
  • 选择“用户”作为右侧“结束实体”。
  • 交换多重性:“Notes”应为“Many”,“User”应为“One”。
  • 我取消选择右侧的导航属性,因为我永远不会从“用户”导航到其他表:但这取决于你。
  • 如果您同时拥有“CreatedBy”和“ModifiedBy”属性,则可能需要将关联名称更改为更有意义的内容(例如,将“NoteUser”更改为“NoteCreatedByUser”
  • 同样适用于导航属性(例如,将“用户”更改为“CreatedByUser”)
  • 取消选中“添加外键属性....”。
  • 单击“确定”。
  • 重要提示:在“属性”窗口中,转到“参照约束”并单击省略号。
  • 选择“用户”作为校长。
  • 将从属属性更改为适当的值(例如“CreatedBy”)
  • 单击“确定”。

完成!

以下项目的屏幕截图。

enter image description here

答案 1 :(得分:1)

我的猜测是,用户实体上的关联已在用户名上定义,而用户名是SQL Server中的候选键(在其上定义了唯一索引)。虽然您可以在SQL Server中基于此设置创建关系,但当前版本的EF NOT 支持基于候选键创建关联: In EF (3.5 and 4.0) FKs MUST point to Primary Keys.

实现此功能的唯一方法是在 Note 表中创建一个新的int字段(如 UserId ),然后在 User.Id (PK)和 Note.UserID (FK)和EF将很乐意根据您的关系创建一个关联。