实体框架4.3.1到6 EDMX(ObjectContext)

Kei*_*son 12 .net c# entity-framework edmx nuget

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

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

有什么方法可以阻止这种情况发生吗?我看不到一个*.tt文件.重新生成EDMX并不是一个真正的选择,因为对概念模型进行了重要的定制(我已经有好几天了!).

我尝试创建一个新的EDMX作为测试,并表现出同样的问题.只要我将代码生成更改为"Default"以便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;
Run Code Online (Sandbox Code Playgroud)

这让我分心 - 我想我将不得不将其破解为EF 5.0

Jer*_*emy 22

我已经解决了这个问题.这是因为您已经从EF 5.X升级到EF 6.X,您的edmx仍然采用旧的传统生成策略.

你需要什么:

安装其中一个扩展后,您需要备份您的edmx和设计器文件(或使用源代码管理).重新启动Visual Studio.

重新启动Visual Studio后,您想进入您的项目并:

  1. 进入图表设计界面
  2. 右键单击并选择"添加代码生成项"
  3. 选择"EF 6.X实体对象生成器"并将其称为适当的类似"Template.tt"
  4. 让这一代发生
  5. 回到设计界面,确保现在的代码生成策略 T4
  6. 删除旧版EF 5.X创建的设计器文件

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

  • 谢谢你的杰里米 - 这在大多数时候都是一种享受.我真的不明白为什么升级过程不适合你.*叹* (2认同)