【问题标题】:Changing navigation property names in Entity Framework entity model caused relationships not to load在 Entity Framework 实体模型中更改导航属性名称导致关系不加载
【发布时间】:2016-10-22 23:58:13
【问题描述】:

我们正在将项目从 Entity Framework 4 更新到 Entity Framework 6。我们使用数据库优先映射。当我们最初构建项目时,我们重命名了实体模型中的许多导航属性,以改进属性名称的语义。

当我们更新到 Entity Framework 6 时,.edmx 架构已更改,因此我们重新创建了所有名称更改。不幸的是,在第一次访问数据库时,Entity Framework 抛出了这个异常:

System.Data.Entity.Core.MetadataException was unhandled by user code
  HResult=-2146232007
  Message=Schema specified is not valid. Errors: 
The relationship 'web_appModel.fk_service_order_workorder_id' was    not loaded because the type 'web_appModel.workorder' is not available.
The following information may be useful in resolving the previous error:

The required property 'asset' does not exist on the type 'Persistence.Interface.workorder'.

我们的模型有一个 service_order 表,其外键指向工作订单表,外键指向资产表。工作订单对象中的导航属性最初称为资产,但我们将其重命名。

在这种情况下的问题是实体框架无法加载关系 a 到 b,因为关系 b 到 c 中的导航属性已更改名称。

数据在 PostgreSql 数据库中。我们使用 DevArt DotConnect 作为实体框架提供者。

【问题讨论】:

  • 我也有同样的问题。原来edmx文件现在也像这样为每个外键引用指定导航属性名称 只要名称与生成的C#模型不匹配,DbContaxt就会报架构错误。过去通过自定义 T4 模板来生成自定义属性名称的所有解决方案现在都已损坏。还没找到解决办法。

标签: c# entity-framework postgresql


【解决方案1】:

您需要从数据库更新 EntityFramewok 模型。 双击模型,然后您将找到表的架构,右键单击任何空白部分并选择从数据库中更新模型。 然后转到“刷新”选项卡,然后选择表格。

希望对你有用

【讨论】:

  • 抱歉,我的问题不清楚。我能够从数据库中更新模型。打开 .edmx 后,可以使用模型浏览器视图。通过浏览到实体类型,Visual Studio 允许更改覆盖默认属性名称的 .edmx。我的问题是这样做之后,Entity Framework 不会加载关系。
  • 我不确定它是否会帮助你。但请确保您允许使用外部密钥。您还可以手动拖放 .edmx 中的表之间的关系
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多