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


115

我从数据库中生成了一个实体框架模型(4.0)。我没有设计数据库,也没有对架构的任何控制,但是有一些表没有定义外键约束,但是定义了隐式关系。

例如:

我有一个名为People的表,该表具有以下列:GenderID RaceID

有“性别”和“种族”表,但“人”表中没有外键。

当我导入模型时,它没有为这些关系添加导航属性。我尝试手动添加它,但是“从角色”和“到角色”被禁用。我不确定如何自己添加关系。我该怎么做呢?

Answers:


181

是的-这不是那么简单。

这是您的工作:

1-右键单击设计器,然后单击添加 -> 关联

2-设置关联和基数(人* .. 1性别,人* .. 1种族)

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

4-右键单击新创建的关联,然后单击“ 属性”。

5-在这里,您需要为关键和级联选项设置端点。确保正确获得端点。您还可以在此处为隐式导航属性设置引用约束。

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

7-验证模型,用力指尖。

希望这可以帮助。


20
+1用于保存我的头发剩下的东西。我将添加#6,这需要更改关联的属性页中的外键列,即“参照约束”设置。点击[...]打开参照约束对话框,然后更改设计者插入到“依赖属性”下的子表中的虚拟字段。
乔尔·布朗

8
您还必须转到子表的属性,并删除设计者添加的虚拟字段(该虚拟字段不会映射到子表中的任何实际字段)。
乔尔·布朗

2
在使用View的情况下,还请确保正确使用主键定义(右键单击选择相关字段,在属性中将其标记为EntityKey)。否则,您可能会收到“关系中的角色多重性无效,因为从属角色指的是关键属性...”
Mikl X 2015年

1
在#2上,您可能要确保取消选中“将外键属性添加到实体”复选框。如果您真的不需要它,那会带来一些不必要的麻烦。
加密

一旦再次从数据库更新模型,脚手架实体将保持手动添加的关联?
voodoo_patch

45

我碰到了这篇博客文章,其中提出了以下解决方案,该解决方案对我来说非常有效(不幸的是,我无法让RPM1984在我的情况下正常工作)。

  1. 通过设计器背景右键单击上下文菜单添加关联
  2. 设置您的协会(确保取消选中外键的创建)
  3. 右键单击关联,然后选择属性
  4. 单击“ ...引用约束” 按钮
  5. 设置内部按键之间的关系
  6. 验证(从设计器上下文菜单中)
  7. ???
  8. 利润!

4
+1点4让我做对了,但RPM194答案却忽略了它。
雨果·洛格曼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.