EF-CodeFirst-数据迁移
数据迁移
之前说到Code-First中有不同的数据库初始化策略,如CreateDatabaseIfNotExists,DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways。但是,这些策略存在一些问题,例如,数据库中已经有数据(种子数据除外)或现有的存储过程,触发器等。这些策略用于删除整个数据库并重新创建它,因此将丢失数据和其他数据库对象。
EF引入了一种迁移工具,可在模型更改时自动更新数据库模式,而不会丢失任何现有数据或其他数据库对象。它使用一个名为MigrateDatabaseToLatestVersion的新数据库初始化程序
有两种迁移方式:
- 自动迁移
- 基于代码的迁移
自动迁移
自动迁移可以通过enable-migrations在软件包管理器控制台中执行命令来实现。打开包管理器控制台,然后运行enable-migrations –EnableAutomaticMigration:$true命令(确保默认项目是上下文类所在的项目)。一旦命令成功运行,它将创建一个Configuration从项目DbMigrationConfiguration中的Migration文件夹派生的内部密封类

因为将数据上下文类放到了EntityFramework.Print项目中,故报这个错误;调整一下
Configuration类的构造函数中,AutomaticMigrationsEnabled设置为true。启用自动迁移,下一步是将上下文类中的数据库初始化程序设置为MigrateDatabaseToLatestVersion,如下所示。
删除数据库重新运行,第一次:

修改域模型,并重新添加新数据


Dept表已经根据域模型自动更新了,Person表中原先的数据也没有丢失
基于代码的迁移
基于代码的迁移提供了对迁移的更多控制,并允许配置其他内容,例如设置列的默认值,配置计算列等。为了使用基于代码的迁移,需要在Visual Studio的包管理器控制台中执行以下命令:
- Enable-Migrations: 创建Configuration类启用项目中的迁移.
- Add-Migration: 使用Up()和Down()方法根据指定的名称创建新的迁移类.
- Update-Database:执行由该Add-Migration命令创建的上一个迁移文件,并将更改应用于数据库模式。

和自动迁移区别AutomaticMigrationsEnabled=false;
使用Add-Migration带有迁移类名称的命令创建迁移类,如下所示。
图中Up()方法包含用于创建数据库对象的Down()代码,该方法包含用于删除或删除数据库对象的代码。您也可以编写自己的自定义代码以进行其他配置。这比自动迁移更有优势。
使用add-migration命令创建迁移文件后,必须更新数据库。执行Update-Database命令来创建或修改数据库模式。使用该–verbose选项查看要应用于目标数据库的SQL语句。

数据库已经被更新

回滚迁移
假设想要将数据库模式回滚到之前的任何状态,那么可以update-database使用–TargetMigration参数执行命令,使其返回到想要回滚的点。例如,假设有许多迁移应用于上面的EntityFramework.Base数据库,但您想要回滚到第一个迁移。然后执行以下命令。
update-database -TargetMigration:Base-v1
种子数据
可以在数据库初始化过程中将数据插入数据库表中。比如在数据初始化时给应用程序提供一些测试数据

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
EF-CodeFirst-数据迁移的更多相关文章
- EF Code-First数据迁移
Code-First数据迁移 首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...
- 【EF】EF Code-First数据迁移
Code-First数据迁移 首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...
- EF Code-First数据迁移的尝试
Code-First的方式虽然省去了大量的sql代码,但增加了迁移的操作.尝试如下: 1.首先要在“扩展管理器”里搜索并安装NuGet“库程序包管理器”,否则所有命令都不能识别,会报CommandNo ...
- EF CodeFirst数据迁移与防数据库删除
1 开启migrations功能 enable-migrations -force 2 添加迁移版本 add-migration 名称后缀 我们每次修改实体后,都应该使用这个add-migration ...
- Entity Framework CodeFirst数据迁移
前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual ...
- [EF Core]数据迁移(二)
摘要 在实际项目中,大多都需要对业务逻辑以及操作数据库的逻辑进行分成操作,这个时候该如何进行数据的迁移呢? 步骤 上篇文章:EF Core数据迁移操作 比如,我们将数据上下文放在了Data层. 看一下 ...
- EF架构~CodeFirst数据迁移与防数据库删除
回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...
- codefirst数据迁移技术,在保留数据库数据下实现对模型的修改并映射到数据库
一前言 这是我的处女作,写的不好的地方还望指出共同讨论.EF的数据访问方式有三种DbFirst,ModelFirst,还有本文要提到的CodeFirst 三者都是以ORM的方式建立.本人之前学习的.n ...
- ASP.NET Core ef启用数据迁移
创建一个项目 通过Nuget获取EF Core相关的扩展包 appsettings.json 建立数据库连接串 创建数据库上下文EntityDbContext类,用于实体类映射数据库表 使用包管理器控 ...
- EF Core数据迁移操作
摘要 在开发中,使用EF code first方式开发,那么如果涉及到数据表的变更,该如何做呢?当然如果是新项目,删除数据库,然后重新生成就行了,那么如果是线上的项目,数据库中已经有数据了,那么删除数 ...
随机推荐
- golang:mime.Decode、mime.DecodeHeader
最近在做邮件解析的相关工作,在使用mime.Decode/mime.DecodeHeader时有些疑问. 有些搞不懂mime.Encode和mime.EncodeHeader的区别.
- 【iCore1S 双核心板_ARM】例程十一:RTC实时时钟实验——显示时间和日期
实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ RTC_DateTypeDef sDate; RTC_TimeTypeDef sTime; u ...
- 【发布iCore3&iCore4ADM资料】
资料包说明: 1.解压资料包,里面有两个文件夹,iCore3和iCore4. iCore3文件夹里包含源代码及AD模块的详细资料. iCore4文件夹里仅有源代码,AD模块的详细资料参考iCore3里 ...
- Git 移动操作
顾名思义移动(move )操作移动目录或文件从一个位置到另一个.Tom 决定移动到src目录下的源代码.因此,修改后的目录结构看起来会像这样. [tom@CentOS project]$ pwd /h ...
- iTunes空间不足无法备份iphone的问题
因为换手机,需要把旧iphone备份出来,在新iphone上恢复.使用mac进行备份时总是提示iTunes无法备份,所用电脑空间不够,即使有个用空间的移动硬盘也无法备份.网上的方法都是说修改iTune ...
- JPA 不生成外键
在用jpa这种orm框架时,有时我们实体对象存在关联关系,但实际的业务场景可能不需要用jpa来控制数据库创建数据表之间的关联约束,这时我们就需要消除掉数据库表与表之间的外键关联.但jpa在处理建立外键 ...
- glob通配符
描述glob是shell使用的路径匹配符,类似于正则表达式,但是与正则表达式不完全相同.在linux操作中如文件匹配等等其实已经使用了glob通配符.由于其在路径匹配方面的强大,其他语言也有相应的实现 ...
- es6在项目中的应用
摘要: 今年es6完成了规范制定,但是各大浏览器厂商还没有完全的支持.如果等到主流浏览器支持了再去学习,可能黄花菜都凉了.小编特地为大家准备了一个查询es6在各浏览器支持情况的站点,可以访问这里查询. ...
- 为何谷歌围棋AI AlphaGo可能会把李世石击溃
/* 版权声明:可以随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 谷歌DeepMind开发的人工智能围棋程序AlphaGo以5:0的压倒性优势击败了欧洲围棋冠军.专业二 ...
- 【代码审计】YzmCMS_PHP_v3.6 代码执行漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...