实体框架 - 手动添加导航属性

121

我从数据库生成了一个实体框架模型(4.0)。我没有设计过数据库,也无法控制架构,但有几个表没有定义外键约束,但是已经有了隐含的关系。

例如:

我有一个名为People的表,其中包含以下列: GenderID RaceID

有性别和种族的表,但People表中没有外键。

当我导入模型时,它没有为这些关系添加导航属性。我试图手动添加,但From Role和To Role都被禁用了。我不确定如何自己添加关系。我该怎么做?

2个回答

192

是的,这并不是那么简单。

以下是您需要执行的操作:

1 - 在设计器上右键单击,选择添加 -> 关联

2 - 设置关联和基数(People *..1 Gender,People *..1 Race)

3 - 进入模型浏览器 -> 关联

4 - 右键单击新创建的关联,点击属性

5 - 在此处,您需要设置密钥和级联选项的端点。确保正确设置了端点。您还可以在此处为隐式导航属性设置引用约束。

6 - 将导航属性映射到相关表/字段。

7 - 验证您的模型,并祈求好运。


21
+1 是为了挽救我剩下的头发。我会添加 #6,需要在关联属性页中更改外键列的设置,参照约束条件设置。点击 [...] 打开参照约束对话框,并更改设计师插入到子表中的虚拟字段下方的从属属性。 - Joel Brown
8
您还需要打开子表的属性并删除设计师添加的虚拟字段(该字段不映射到子表中的任何实际字段)。 - Joel Brown
2
在视图的情况下,还要确保您正确获取主键定义(右键选择相关字段,在属性中将它们标记为EntityKey)。否则,您可能会遇到“在关系中角色的多重性无效,因为从属角色引用了关键属性...”的错误。 - Mikl X
1
在第二步,您可能需要确保取消选中“将外键属性添加到实体”复选框。如果您真的不需要它,那会带来一些不必要的麻烦。 - Encryption
当您再次从数据库更新模型时,脚手架实体将保留手动添加的关联吗? - voodoo_patch

49

我看到了这篇博客文章,提出了以下解决方案,对我非常有效(不幸的是,我无法在我的情况下使RPM1984的方法起作用)。

  1. 通过设计师背景右键菜单添加关联
  2. 设置你的关联(一定要取消创建外键的选项)
  3. 右键单击关联并选择“属性”
  4. 单击引用约束中的...按钮
  5. 设置其中键之间的关系
  6. 验证(从设计者上下文菜单)
  7. ???
  8. 利润!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接