47

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

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

谢谢你。

4

3 回答 3

57
  1. 您删除了旧的 .tt 文件
  2. 你在设计模式下打开你的 edmx 文件(这样你就可以看到你的模型)
  3. 右键单击空闲空间
  4. 选择添加代码生成项
  5. 在对话框中选择“EF 6.x DbContext Code Generation Item”(类似这样)
  6. 保存您的 edmx,将为您生成所有类,包括新的命名空间等等
于 2013-10-21T14:36:26.650 回答
30

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

路线图是(请参阅上面给出的链接中的详细信息):

  1. 准备工作:为 Visual Studio 2012/13安装实体框架 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 模板“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

注意:

于 2014-07-11T12:33:03.230 回答
13

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

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

于 2013-11-01T10:50:16.033 回答