将Entity Framework 4.3.1转换为6的EDMX (ObjectContext)

12

我正在尝试将一个项目从EF 4.3.1升级到EF 6.0。

该模板使用ObjectContext,现在每当我更改模板时,它都会用旧的EF 4.3.1命名空间覆盖在*.Designer.cs文件中生成的代码,导致构建失败。

有没有办法阻止这种情况发生?我看不到任何要处理的*.tt文件。重新生成EDMX并不是一个真正的选项,因为概念模型已经进行了重大定制(我可能需要几天时间!)。

我已经尝试创建一个新的EDMX作为测试,但出现了相同的问题。一旦我将代码生成更改为“默认”以使用ObjectContext,EDMXName.Designer.cs文件就会使用旧的命名空间编写。

using System;
using System.ComponentModel;
using System.Data.EntityClient;
using System.Data.Objects;
using System.Data.Objects.DataClasses;
using System.Linq;
using System.Runtime.Serialization;
using System.Xml.Serialization;

这让我无法集中精力 - 我觉得我必须将其降级到EF 5.0

1个回答

23

我已经解决了这个问题。原因是您从EF 5.X升级到EF 6.X,但您的edmx仍使用旧版生成策略。

您需要:

安装其中1个扩展程序后,您需要备份edmx和designer文件(或使用源代码控制)。重新启动Visual Studio。

重新启动Visual Studio后,您需要进入项目并:

  1. 进入图表设计界面
  2. 右键单击并选择“添加代码生成项”
  3. 选择“EF 6.X Entity Object Generator”,并将其命名为适当的名称,例如“Template.tt”
  4. 让生成过程发生
  5. 返回到设计界面,并确保代码生成策略现在为T4
  6. 删除旧版遗留EF 5.X创建的designer文件

这将为您提供基于ObjectContext派生上下文以及与较新的EF 6.0命名空间匹配的所有内容。


2
谢谢你,Jeremy - 现在这个基本上完美运行了。我真的不明白为什么升级过程不能自动解决这个问题。叹气 - Keith Jackson
是的,我花了2个小时来尝试让它工作。这很麻烦,但现在很高兴有其他人可以跟随。 - Jeremy
1
你还需要更改一些命名空间,可以参考类似的问题:将EF4 EDMX升级到EF6 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接