C# 从EF 4.0 ObjectContext升级到EF 6/6.1

C# 从EF 4.0 ObjectContext升级到EF 6/6.1,c#,.net,entity-framework,C#,.net,Entity Framework,我想将一个基于FX4.0和EF4.0(数据库优先使用ObjectContext)的大型项目升级到EF的最新6/6.1版本 我已经(成功地)完成了实际升级EDMX的所有步骤(添加T4模板、更改命名空间引用等等),现在我的数据访问程序集已经编译好了 为了快速完成任务,我使用ObjectContext T4模板执行升级,希望尽量减少所需的代码更改。我使用的模板是Visual Studio Gallery中的“EF 6.x EntityObject Generator模板”,整个解决方案仍然基于.Net

我想将一个基于FX4.0和EF4.0(数据库优先使用ObjectContext)的大型项目升级到EF的最新6/6.1版本

我已经(成功地)完成了实际升级EDMX的所有步骤(添加T4模板、更改命名空间引用等等),现在我的数据访问程序集已经编译好了

为了快速完成任务,我使用ObjectContext T4模板执行升级,希望尽量减少所需的代码更改。我使用的模板是Visual Studio Gallery中的“EF 6.x EntityObject Generator模板”,整个解决方案仍然基于.Net Framework 4.0


我想知道,如果使用ObjeCategor代替使用EF6的DbCategar会减少或限制新EF 6的好处(我将继续使用数据库第一策略)。

首先考虑的是,微软正在从EF7开始放弃ObjutsAc文支持,所以如果您打算升级,现在就可以了。 从正常的编码角度来看,DbContext或ObjectContext并没有那么不同。大多数情况下,一切都是一样的。DbContext的启动时间稍长,因为它必须编译模型,但您也可以放置预编译视图以加快速度

DbContext很好地连接了DataAnnotation验证,并且它支持基于快照的更改检测,这实际上比ObjectContext提高了性能

如果您在反射中使用了大量的内容,那么您将遇到问题,因为在运行时,对象是从运行时代理派生的,而不是您声明的类。因此,它将需要一点工作。我们有类似的东西,但我们在每个类上都放了一个接口,以实际检索正确的类型进行反射

DbContext还将支持非数据库连接,如Azure表存储或任何自定义存储

大多数情况下,建议使用DbContext。因为它将继续存在。ObjectContext及其对应的EntityObject已经被弃用。

DbContext只是ObjectContext的一个(好的)包装器,它首先支持相当简单的代码,这允许您轻松地使用POCO,通常使用它构建数据层更方便。但从本质上讲,利用DbContext的代码仍然在下面使用相同的ObjectContext功能

此外,与ObjectContext相比,DbContext有一些限制:例如,使用DbContext的StoredProcedures没有现成的支持(CUD操作的存储过程除外),因此您无论如何都必须回退到ObjectContext

EntityFramework6带来了一些在代码使用方面看不到的好处,例如提高了性能和修复了错误。您将使用任何一个上下文自动获取这些内容

编辑

就我个人而言,我完全赞成使用DbContext,因为它现在是一种“推荐”(事实上,是唯一受支持的)方式,但是如果您有一个非常大的数据库模型(有很多表、SP等)和依赖它的代码库,迁移到DbContext需要对数据层进行重大更改,而这些更改在短期内不会给您带来好处。但它肯定会改进您的系统设计,并允许您在未来的长期改进

说明即将进行的重大更改(包括新平台和数据存储支持),这些更改在您的情况下可能有用,也可能无用

这有效地意味着你应该仔细考虑你现在和将来的目标是什么。