将EF 4 EDMX升级到EF 6

时间:2013-10-21 14:06:13

标签: entity-framework entity-framework-4 entity-framework-6

我的应用程序在EF 4中首先使用数据库EDMX。我想将所有内容升级到EF 6.使用NuGet获取EF 6后,我必须对使用我的EF模型的类进行大量更改,因为在EF 6中已经更改了名称空间。然后我意识到,我的EDMX生成的代码也使用了错误的名称空间等。到目前为止我还没有使用自定义T4。

如何将现有的EDMX升级到EF 6。

谢谢。

3 个答案:

答案 0 :(得分:56)

  1. 删除旧的.tt文件
  2. 您可以在设计师模式下打开edmx文件(这样您就可以看到您的模型)
  3. 右键单击可用空间
  4. 选择添加代码生成项
  5. 在对话框中选择“EF 6.x DbContext代码生成项”(类似这样)
  6. 保存您的edmx,将为您生成所有类,使用新的名称空间等

答案 1 :(得分:29)

除了Rand Random和Dean Oliver给出的答案之外,让我提一下以下MSDN link,描述升级到EF6的一般步骤不要低估手动步骤需要...

路线图(见上文给出的链接中的详细信息):

  1. 准备工作:安装Entity Framework 6 Tools for Visual Studio 2012/13

  2. 安装 EF6 NuGet软件包

  3. 确保删除程序集引用到System.Data.Entity.dll(注意:安装EF6 NuGet包应该会自动从项目中删除对System.Data.Entity的任何引用你)。

  4. 将所有EF Designer(EDMX)模型交换为使用EF 6.x代码生成

    备注:

    • 如果您之后收到消息“实体数据模型设计器无法显示您请求的文件”,请单击显示的文本消息“实体数据模型”中的修改链接Designer ...您可以修改 ...“,它将显示表格。使用 Ctrl + A 选择全部,然后按 Del ,然后右键单击并选择“从数据库更新模型”,最后使用< KBD>控制 + 取值。这将使用默认的T4模板“EF 6.x DbContext Generator”将模型更新到最新版本。

    • 如果您在项目中使用了ObjectContext,那么您应该考虑下载模板"EF 6.x EntityObject Generator"。然后在模型设计器中右键单击,选择“添加代码生成项”,然后选择尚未使用的名称。它会生成正确的类,之后您必须删除所有旧的(“*.tt”)文件和相关生成的类(“*.cs”)文件。

  5. 对于正在使用的核心EF类型
  6. 更新名称空间,即

    • System.Data.*中的任何类型都移至System.Data.Entity.Core.*
    • System.Data.EntityState =&gt; System.Data.Entity.EntityState
    • System.Data.Objects.DataClasses.EdmFunctionAttribute =&gt; System.Data.Entity.DbFunctionAttribute
      注意:此类已重命名;具有旧名称的类仍然存在且有效,但现在已标记为已过时。
    • System.Data.Objects.EntityFunctions =&gt; System.Data.Entity.DbFunctions
      注意:此类已重命名;具有旧名称的类仍然存在且有效,但现在已标记为已过时。
    • 空间类(例如DbGeographyDbGeometry)已从System.Data.Spatial =&gt;移出System.Data.Entity.Spatial

  7. N.B。:

答案 2 :(得分:13)

以及Rand Random建议的步骤。如果您使用的是VS2012,请记住为Visual Studio 2012安装Entity Framework 6工具。 download here

这将确保在单击步骤4:添加代码生成项时显示 EF 6.x DbContext Generator 模板