将EF 4 EDMX升级到EF 6

Sol*_*arX 45 entity-framework entity-framework-4 entity-framework-6

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

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

谢谢.

Ran*_*dom 56

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


Mat*_*att 29

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

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

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

  2. 安装EF6 NuGet包

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

  4. 交换任何EF Designer(EDMX)模型以使用EF 6.x代码生成.

    笔记:

    • 如果您之后收到消息"实体数据模型设计器无法显示您请求的文件",则单击显示的文本消息中的链接修改 "实体数据模型设计器...您可以修改 ... ",将显示表格.用Ctrl+ 选择全部A,然后按Del,然后右键单击并选择"从数据库更新模型",最后使用Ctrl+ 保存S.这将使用默认的T4-Template"EF 6.x DbContext Generator"将模型更新到最新版本.

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

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

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

注意:


小智 13

以及Rand Random建议的步骤.如果您使用的是VS2012,请记住为Visual Studio 2012安装Entity Framework 6工具.在这里下载

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