【发布时间】: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