数据迁移

之前说到Code-First中有不同的数据库初始化策略,如CreateDatabaseIfNotExists,DropCreateDatabaseIfModelChanges和DropCreateDatabaseAlways。但是,这些策略存在一些问题,例如,数据库中已经有数据(种子数据除外)或现有的存储过程,触发器等。这些策略用于删除整个数据库并重新创建它,因此将丢失数据和其他数据库对象。

EF引入了一种迁移工具,可在模型更改时自动更新数据库模式,而不会丢失任何现有数据或其他数据库对象。它使用一个名为MigrateDatabaseToLatestVersion的新数据库初始化程序

有两种迁移方式:

  1. 自动迁移
  2. 基于代码的迁移

自动迁移

自动迁移可以通过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-数据迁移的更多相关文章

  1. EF Code-First数据迁移

    Code-First数据迁移  首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...

  2. 【EF】EF Code-First数据迁移

    Code-First数据迁移  首先要通过NuGet将EF升级至最新版本. 新建MVC 4项目MvcMigrationDemo 添加数据模型 Person 和 Department,定义如下: usi ...

  3. EF Code-First数据迁移的尝试

    Code-First的方式虽然省去了大量的sql代码,但增加了迁移的操作.尝试如下: 1.首先要在“扩展管理器”里搜索并安装NuGet“库程序包管理器”,否则所有命令都不能识别,会报CommandNo ...

  4. EF CodeFirst数据迁移与防数据库删除

    1 开启migrations功能 enable-migrations -force 2 添加迁移版本 add-migration 名称后缀 我们每次修改实体后,都应该使用这个add-migration ...

  5. Entity Framework CodeFirst数据迁移

    前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是“Database First”还是“Model First”当模型发生改变了都可以通过Visual ...

  6. [EF Core]数据迁移(二)

    摘要 在实际项目中,大多都需要对业务逻辑以及操作数据库的逻辑进行分成操作,这个时候该如何进行数据的迁移呢? 步骤 上篇文章:EF Core数据迁移操作 比如,我们将数据上下文放在了Data层. 看一下 ...

  7. EF架构~CodeFirst数据迁移与防数据库删除

    回到目录 本文介绍两个概念,防数据库自动删除,这是由于在code first模式下,当数据实体发生变化时,会对原来数据库进行删除,并将新数据表添加进来,但这对于我们的运营环境数据库,是万万不能接受的, ...

  8. codefirst数据迁移技术,在保留数据库数据下实现对模型的修改并映射到数据库

    一前言 这是我的处女作,写的不好的地方还望指出共同讨论.EF的数据访问方式有三种DbFirst,ModelFirst,还有本文要提到的CodeFirst 三者都是以ORM的方式建立.本人之前学习的.n ...

  9. ASP.NET Core ef启用数据迁移

    创建一个项目 通过Nuget获取EF Core相关的扩展包 appsettings.json 建立数据库连接串 创建数据库上下文EntityDbContext类,用于实体类映射数据库表 使用包管理器控 ...

  10. EF Core数据迁移操作

    摘要 在开发中,使用EF code first方式开发,那么如果涉及到数据表的变更,该如何做呢?当然如果是新项目,删除数据库,然后重新生成就行了,那么如果是线上的项目,数据库中已经有数据了,那么删除数 ...

随机推荐

  1. 编译错误 ld: cannot find -lz

    [时间:2017-04] [状态:Open] [关键词:makefile,gcc,linux,ld,libz.so] 在新安装的centos上编译程序遇到上述问题,找了半天,原来是没有安装 需要安装z ...

  2. java框架篇---Struts2 本地化/国际化(i18n)

    国际化(i18n)是规划和实施的产品和服务,使他们能很容易地适应特定的本地语言和文化的过程中,这个过程被称为本地化.国际化的过程有时也被称为翻译或本地化启用.国际化是缩写i18n,因为我和两端用n字打 ...

  3. 【6集iCore3_ADP触摸屏驱动讲解视频】6-3 底层驱动之液晶显示

    源视频包下载地址: 链接:http://pan.baidu.com/s/1pKSUU2v 密码:4zme   银杏科技优酷视频发布区: http://i.youku.com/gingko8    

  4. 关于Unity中的Mesh Collider碰撞器

    原来我的场景中有一个平面Plane带Mesh Collider碰撞器组件,一个主角Hero带有一个Box Collider碰撞器和有重力的Rigidbody刚体组件,主角可以放在平面上. 在导入场景后 ...

  5. 驱动文件中只有cat/inf/dll文件,怎么安装

    网上下载了一个驱动,里面包含文件只有cat/inf/dll文件,怎么安装? 1.计算机-右键-管理-设备管理器,找到要装驱动的设备上 2.右键-更新驱动程序-浏览到本地的这个驱动文件夹 3.开始安装

  6. html5中的input和label写法与取值

    demo 效果图如上 label是html5特有的,是定义 input 元素的标注.凡是input前面要有个label标识下,label和input真是一对好兄弟啊.<label> 标签的 ...

  7. Java如何验证电子邮件地址格式?

    在Java编程中,如何验证电子邮件地址格式? 以下示例演示如何使用String类的matches()方法来验证电子邮件地址. package com.yiibai; public class Vali ...

  8. java-信息安全(六)-基于RSA理解数字签名示例

    概述 java-信息安全(四)-数据签名.数字证书 java-信息安全(五)-非对称加密算法RSA RSA工具类 使用java-信息安全(五)-非对称加密算法RSA项目中RSACoder 数字签名理解 ...

  9. SpringBoot 拦截器(Interceptor)的使用

    拦截器intercprot  和 过滤器 Filter 其实作用类似 在最开始接触java 使用struts2的时候,里面都是filter 后来springmvc时就用interceptor 没太在意 ...

  10. 斯坦福2011秋季 iPad and iPhone Application Development 资源

    1. MVC and Introduction to Objective-C (September 27, 2011) - HD 2. My First iOS App (September 29, ...