【问题标题】:How to update EDMX file version 2.0 to 3.0?如何将 EDMX 文件版本 2.0 更新到 3.0?
【发布时间】:2013-12-19 09:38:50
【问题描述】:

我有一个使用 Entity Framework 5 的 VS-2012 解决方案。 EDMX 文件是 2.0 版:

<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">

当我使用 VS 创建一个新项目和一个新的 EDMX 文件时,它将是 3.0 版。 由于我在使用 2.0 版本的设计器中无法使用功能时遇到一些问题,因此我想将 EDMX 文件迁移到新版本。

我该怎么做?

【问题讨论】:

  • 您是否会在使用 Edmx 2.0 的解决方案中以 .NET Framework 4 为目标?
  • 这是一个 .NET 4.0 项目,是的。但我无法再访问该项目了...
  • 查看我的答案 - 通常您需要重新定位您的项目,并且 AFAIR 应该升级 EDMX 的版本。由于 .NET Framework 4 不支持 v3 功能,因此手动更改可能不起作用。

标签: visual-studio-2012 entity-framework-5


【解决方案1】:

如果项目以 .NET Framework 4 为目标并且您未使用 EF6 或更高版本,则不应更改 EDMX 2.0 的版本。

  • 这是因为 .NET Framework 4 附带的 EF 不知道 如何处理枚举、空间类型等 v3 功能。
  • 确实,现在很多机器都安装了 .NET Framework 4.5 或更高版本,即使它以 .NET Framework 4 为目标(.NET Framework 4.5 和更高版本是就地升级),它也将用于运行您的项目。

  • 但是,如果您更改 EDMX 的版本并碰巧在 只有 .NET Framework 4 的机器会当场死掉。

如果您需要迁移到 EDMX 3,您需要将您的项目从 .NET Framework 4 重新定位到 .NET Framework 4.5,这将自动升级您的 EDMX 版本。如果您想在 .NET Framework 4 上使用 EDMX 3 功能,唯一的方法是使用 EF6 或更新版本。新设计师确实支持这种情况 - 你可以阅读这个here

【讨论】:

  • 问题已超过 1 年 - “你为什么需要它”不再相关
  • 拍摄,我刚看了 12 月 19 日,还以为是几周前 :D - 所以没那么久
【解决方案2】:

如果您通过添加“现有项目”来添加 edmx 文件,然后尝试打开该文件,它应该会给您一个错误。单击“修改”,然后它应该打开。转到属性(F4),将“代码生成策略”更改为“T4”,然后保存EDMX文件。

然后您可以使用文本编辑器打开 EDMX 文件并确保第 2 行有 edmx:Edmx Version="3.0"

【讨论】:

    【解决方案3】:

    我最终做的是创建一个新的空 EF 模型;一个新的 Test.edmx 文件。

    然后,我将具有架构属性的元素中的值从原来的 EDMX 复制并粘贴到新的,例如:

    <edmx:StorageModels>
      <Schema xmlns="http://schemas.microsoft.com/ado/2009/11/edm/ssdl" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator"
              Namespace="Entities.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" >
    
        ... paste contents from original EDMX ...
    
      </Schema>
    </edmx:StorageModels>
    

    然后我将整个内容复制粘贴回原来的 EDMX 并删除了测试版本。显然使用了源代码管理来比较和检查是否有问题。

    我需要解决一些问题:

    • Namespace="Test" 是原来的样子。
    • ProviderManifestToken
    • xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" 抱怨不知道 store:Type 元素是什么时,添加架构声明。
    • 奇怪的是,我认为它重置了 EDMX 上的自定义工具命名空间,所以我生成的类不在我想要的 CLR 命名空间中,如果你明白我的意思,我的部分类合作伙伴被“断开”。

    【讨论】:

    • 很高兴您找到了解决方法。当模型不是太大时,我会简单地建议从现有数据库创建一个新模型。重新定义映射数据是一些工作,但至少您要确保没有元数据被弄乱。
    • 同意。我处于拥有现有模型但没有现有数据库的不可想象的情况:(
    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    相关资源
    最近更新 更多