- 实体框架教程
- 实体框架 - 首页
- 实体框架 - 概述
- 实体框架 - 架构
- 实体框架 - 环境设置
- 实体框架 - 数据库设置
- 实体框架 - 数据模型
- 实体框架 - DbContext
- 实体框架 - 类型
- 实体框架 - 关系
- 实体框架 - 生命周期
- 实体框架 - 代码优先方法
- 实体框架 - 模型优先方法
- 实体框架 - 数据库优先方法
- 实体框架 - 开发方法
- 实体框架 - 数据库操作
- 实体框架 - 并发
- 实体框架 - 事务
- 实体框架 - 视图
- 实体框架 - 索引
- 实体框架 - 存储过程
- 实体框架 - 脱机实体
- 实体框架 - 表值函数
- 实体框架 - 原生SQL
- 实体框架 - 枚举支持
- 实体框架 - 异步查询
- 实体框架 - 持久化
- 实体框架 - 投影查询
- 实体框架 - 命令日志
- 实体框架 - 命令拦截
- 实体框架 - 空间数据类型
- 实体框架 - 继承
- 实体框架 - 迁移
- 实体框架 - 渴望加载
- 实体框架 - 延迟加载
- 实体框架 - 显式加载
- 实体框架 - 验证
- 实体框架 - 跟踪更改
- 实体框架 - 彩色实体
- 实体框架 - 代码优先方法
- 实体框架 - 第一个示例
- 实体框架 - 数据注释
- 实体框架 - Fluent API
- 实体框架 - 初始化数据库
- 实体框架 - 代码优先迁移
- 实体框架 - 多个DbContext
- 实体框架 - 嵌套实体类型
- 实体框架资源
- 实体框架 - 快速指南
- 实体框架 - 有用资源
- 实体框架 - 讨论
实体框架 - 迁移
在实体框架5和之前的实体框架版本中,代码分为核心库(主要是System.Data.Entity.dll),作为.NET框架的一部分发布,以及附加库(主要是EntityFramework.dll),使用NuGet分发和发布,如下图所示。
在实体框架6中,以前是.NET框架一部分的核心API也作为NuGet包的一部分分发。
这是为了允许实体框架开源。但是,结果是,每当需要将应用程序从旧版本的实体框架迁移或升级到EF 6时,都需要重新构建应用程序。
如果您的应用程序使用DbContext(在EF 4.1及更高版本中发布),则迁移过程很简单。但如果您的应用程序是ObjectContext,则需要更多工作。
让我们来看一下将现有应用程序升级到EF6需要执行的步骤。
步骤1 - 第一步是将目标设置为.NET Framework 4.5.2及更高版本,右键单击您的项目并选择属性。
步骤2 - 再次右键单击您的项目并选择“管理NuGet程序包...”
步骤3 - 在“联机”选项卡下选择EntityFramework并单击“安装”。确保已删除对System.Data.Entity.dll的程序集引用。
安装EF6 NuGet包时,它应该会自动为您删除项目中对System.Data.Entity的任何引用。
步骤4 - 如果您有任何使用EF设计器创建的模型,则还需要更新代码生成模板以生成与EF6兼容的代码。
步骤5 - 在解决方案资源管理器中,在您的edmx文件下,删除现有的代码生成模板,这些模板通常命名为<edmx_file_name>.tt和<edmx_file_name>.Context.tt。
步骤6 - 在EF设计器中打开您的模型,右键单击设计图面,然后选择“添加代码生成项...”
步骤7 - 添加相应的EF 6.x代码生成模板。
它也将自动生成与EF6兼容的代码。
如果您的应用程序使用EF 4.1或更高版本,则无需更改代码中的任何内容,因为DbContext和Code First类型的命名空间没有更改。
但如果您的应用程序使用的是旧版本的实体框架,则以前在System.Data.Entity.dll中的ObjectContext等类型已移动到新的命名空间。
步骤8 - 您需要更新您的using或Import指令以针对EF6构建。
命名空间更改的一般规则是,System.Data.*中的任何类型都移动到System.Data.Entity.Core.*。以下是一些示例:
- System.Data.EntityException ⇒ System.Data.Entity.Core.EntityException
- System.Data.Objects.ObjectContext ⇒ System.Data.Entity.Core.Objects.ObjectContext;
- System.Data.Objects.DataClasses.RelationshipManager ⇒ System.Data.Entity.Core.Objects.DataClasses.RelationshipManager;
某些类型位于Core命名空间中,因为对于大多数基于DbContext的应用程序而言,它们不会直接使用。
- System.Data.EntityState ⇒ System.Data.Entity.EntityState
- System.Data.Objects.DataClasses.EdmFunctionAttribute ⇒ System.Data.Entity.DbFunctionAttribute
您的现有实体框架项目无需任何重大更改即可在实体框架6.0中运行。