实体框架从 v1 到 v4 的转换问题

Posted

技术标签:

【中文标题】实体框架从 v1 到 v4 的转换问题【英文标题】:Entity Framework conversion from v1 to v4 problem 【发布时间】:2011-03-04 18:20:45 【问题描述】:

将我的数据访问层项目从 EntityFramework v1 转换为 v4 后,每个实体类都出现了一堆错误:

错误 10016:解析项目“EntityTypeShape”时出错。异常消息是:'未解析的引用'NS.EntityName1'。'。 DataAccessLayer\Model.edmx

错误 10016:解析项目“AssociationConnector”时出错。异常消息是:'NS.EntityName1'。'。 DataAccessLayer\Model.edmx

有谁知道这是什么以及如何解决它?

【问题讨论】:

嗨,马克斯。我刚刚升级了我们的一个解决方案,我遇到了和你一样的问题。你找到解决办法了吗? 没有。我从头开始重新创建了所有内容。 【参考方案1】:

如果模型很小,那么重新生成它可能是最简单的。如果您希望修复它,您可以在转换之前或之后在 XML 编辑器中手动修改 XML。就我而言,问题在于 EntityType 属性不正确 - 特别是命名空间不正确。我不确定它在 VS2008 中是如何正常工作的,但我没有进一步追求它的愿望。 如果您不介意丢失模型的布局,最简单的修复方法是删除 <Diagram> 标记内的所有内容,如下所示:

<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
  <Diagram Name="YourDiagramName">
  </Diagram>
</edmx:Diagrams>

保存并在设计器中重新打开模型。现在应该可以解决问题了。

如果您想保留布局,而不是简单地删除 &lt;Diagram&gt; 标记内的所有内容,您需要更正任何不正确的 EntityType 属性。诀窍是确保指定了完全限定的类型名称。在我的例子中,命名空间中有一些额外的东西——不确定它是如何到达那里的,或者它在 VS2008 中是如何工作的,但纠正这是第一步。您可能希望通过查看为模型生成的代码来验证您的命名空间和实体名称。

我在 VS2008 和 VS2010 中都尝试了这个解决方案,得到了不同的结果。在 VS2010 中,只需更正 EntityType 属性即可立即解决问题。在VS2008中,再次打开模型时收到错误,“参数不正确”。为了解决这个问题,我能够再次手动编辑 XML。这次我删除了所有的 &lt;AssociationConnector&gt; 标签(和任何子元素)。然后保存文件,一切似乎又恢复了。

【讨论】:

【参考方案2】:

我遇到了完全相同的问题。我不知道这是否是您的问题,但我通过查看 xml 视图中的 edmx 发现我在 xml 中为每个具有该错误的项目提供了重复的引用。我所要做的就是删除重复的引用,一切正常。

这是我的意思的一个例子:

<EntityTypeShape EntityType="PackageManagementEntityModel.Package" Width="1.5" PointX="0.75" PointY="0.75" Height="3.5644742838541665" IsExpanded="true" />
<EntityTypeShape EntityType="PackageManagementEntityModel.ShipLane" Width="1.5" PointX="2.75" PointY="0.75" Height="1.7566536458333331" IsExpanded="true" />
<EntityTypeShape EntityType="PackageManagement.EntityModel.Package" Width="1.5" PointX="0.75" PointY="0.75" Height="3.5844742838541652" />
<EntityTypeShape EntityType="PackageManagement.EntityModel.ShipLane" Width="1.5" PointX="2.625" PointY="0.75" Height="1.7566536458333335" />

【讨论】:

谢谢,但不幸的是这不是我的情况 也适合我。结果他们引用了一些不存在的关系。我想 EF 应该删除它们。

以上是关于实体框架从 v1 到 v4 的转换问题的主要内容,如果未能解决你的问题,请参考以下文章

将实体框架从数据库优先转换为代码优先

生成的查询在实体框架的版本之间是不同的

实体框架运行转换代码时引发异常

LINQ 实体框架查询在 EF Core 中不起作用,引发异常

有没有办法找出哪个表列导致与实体框架的转换出错?

帮助我使用实体框架从 SQL 转换为 linq 嵌套 lambda 表达式