去除外键属性会引发异常。

6
我不想使用外键关联到CompanyType(持有外键id的成员),而更喜欢使用导航属性。因此,我删除了CompanyTypeId。
我得到了这个异常,它涉及实体公司和公司类型之间的关系:
错误5:命名空间“http://schemas.microsoft.com/ado/2008/09/edm”中的“Principal”元素内容不完整。预期可能的元素列表为:“http://schemas.microsoft.com/ado/2008/09/edm”中的“PropertyRef”。

enter image description here

我该如何在不引发异常的情况下删除那些POCO中的id?

你尝试以什么顺序移除它们? - Tyler Ferraro
@Tyler Ferraro:你是什么意思? - Naor
1
通常情况下,您不能删除CompanyTypeId,除非您删除将其作为外键到ID的约束。一旦该约束被删除,那么您就可以从Company中删除CompanyTypeId了。 - Tyler Ferraro
@Tyler Ferraro:但如果我删除了FK约束 - 它是否知道如何加载导航属性? - Naor
2个回答

8
这是外键关联和独立关联之间的区别。两种关联都使用导航属性,但只有外键关联还使用FK属性。您可以像@Robbie提到的那样全局删除它们,或者手动更改选定关系的类型。
  • 在实体框架设计器中选择关系
  • 在属性中删除参照约束
  • 转到映射窗口并映射关系

这是我一个测试应用程序中一个一对多关系的OrderOrderLine实体的截图:

enter image description here

正如您所看到的,OrderLine 实体中没有 OrderId,并且关系的参照约束为空。此外,该关系的映射已经指定。

但是,您永远不能从 CompanyType 中移除 Id。 Ids(PKs)是必须的。您只能更改其属性中的可访问性。


如果从公司实体中删除CompanyTypeId,我该如何进行插入(确定CompanyTypeId)的操作? - Naor
@Noar:你必须分配导航属性 company.CompanyType = ...; - Ladislav Mrnka

4
当您从数据库导入模型时,会询问您是否想要在模型中包含外键列。您需要关闭此选项。 enter image description here

如果我从实体数据模型中删除外键约束,ef 是否会知道加载导航属性? - Naor
实体属性仍将被创建,只是外键列不会。 - Robbie Tapping
从EF继承错误的困惑中解救出来了。谢谢。 - Neil Thompson

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