与视觉操作界面相比,CodeFirst机制提供了一套命令行模式的迁移工具,协助开发人员有效的进行数据库与数据模型的同步维护操作。

新建一个控制台项目CFMigrationsDemo,选用来自数据库的EF设计器模式, 并向其中添加一个Product.cs类文件,如下图所示:

public class Product
{public int Id { get; set; }public string Name { get; set; }
}

Enable-Migrations :启动此项目的迁移功能

在程序包管理器中控制台输入上述命令,可以看到已经启用CodeFirst项目迁移功能,如下图所示:


 Add-Migration MigName:建立迁移文件,Add-Migration 和 MigName中间空一格,MigName为自定义名称,表示要创建的迁移文件名称,建议以有意义的名字来命名。

在程序包管理器控制台输入 Add-Migration AddProduct 以建立迁移文件,如下图所示:

生成的迁移文件如下图所示:

打开迁移文件可以看到如下代码:

    public partial class AddProduct : DbMigration{public override void Up(){CreateTable("dbo.Products",c => new{Id = c.Int(nullable: false, identity: true),Name = c.String(),}).PrimaryKey(t => t.Id);}public override void Down(){DropTable("dbo.Products");}}

这是一个继承DbMigration的类文件,CodeFirst迁移通过自动生成的Up和Down方法记录每一次的变动内容,以支持数据库的升级和降级。通过调用Down方法可以将数据库恢复至此次迁移前的状态。


Update-Database:更新数据库

接下来完成第一次迁移操作,在程序包管理器控制平台输入上述命令:

可以看到迁移已经顺利完成,在原来的数据库中添加了一个Product表:


结构变动迁移

在Product.cs类中,添加一个字段Price:

    public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }}

重新打开程序包管理控制台对话框,在其中键入Add-Migration AddProductPrice添加一个迁移文件,再执行一次Update-Database指令,界面如下图所示:

 数据库已经生成Price字段属性:


查看SQL

Update-Database —Verbose: 每一次迁移是通过SQL语句来完成数据库更新操作的,如果想要查看所使用的的SQL语句,可以加上-Verbose标志。

在Prodcut.cs类文件上增加属性Quantity以创建可以存储商品数量的字段:

    public class Product{public int Id { get; set; }public string Name { get; set; }public int Price { get; set; }public int Quantity { get; set; }}

首先执行Add-Migration AddProductQuantity命令添加迁移文件,在执行一次Update Database-Verbose命令,这个过程除了完成迁移操作外,同时会显示执行迁移的SQL语句,如下图所示:


指定迁移

Update-Database -TargetMigration:MigrationName:Update-Database 和 -TargetMigration之间有空格。在执行Update—Database命令时,可以进一步指定所要迁移的版本,现在执行Update-Database -TargetMigration:AddProductQuantity,这是当前最新的版本,因此不会起作用。再执行前一个版本的迁移,执行Update-Database-TargetMigration:AddProductPrice命令,会导致降级。

上述过程会导致降级,执行AddProductQuantity中的Down方法删除Quantity字段,恢复到AddProduct的状态。

EntityFramework进阶——CodeFirst数据库迁移相关推荐

  1. .Net Core建站(2):EF Core+CodeFirst数据库迁移

    上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...

  2. mysql asp.net core_基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入...

    概述 上一章,我们简单的搭建了依赖注入的三层架构,但是,没有真正的使用,而我们现在就使用MySQL数据,基于 EF Core 的 DbFirst 进行框架搭建. 步骤 1. 右击 Entity 项目, ...

  3. codefirst数据库迁移

    一.为模型更改设置 Code First 数据迁移 1.工具->库程序包管理器->程序包管理器控制台->输入"Enable-Migrations"  或者 Ena ...

  4. Entity Framework CodeFirst数据迁移

    原文:Entity Framework CodeFirst数据迁移 前言 紧接着前面一篇博文Entity Framework CodeFirst尝试. 我们知道无论是"Database Fi ...

  5. Asp.Net MVC CodeFirst模式数据库迁移步骤

    利用Code First模式构建好基本的类后,项目也开始搭建完毕并成功运行,而且已经将数据库表结构自动生成了,但是,我有新的类要加入,有字段需要修改,就得将这部分修改同步到数据库中,利用数据库迁移,将 ...

  6. migration mysql_MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例...

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  7. MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例

    dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...

  8. Entity Framework 5.0系列之Code First数据库迁移

    我们知道无论是"Database First"还是"Model First"当模型发生改变了都可以通过Visual Studio设计视图进行更新,那么对于Cod ...

  9. EF mysql 数据迁移_EF-CodeFirst实现过程+数据库迁移

    系列文章: EF-ModelFirst实现过程+数据库迁移     http://www.jianshu.com/p/2a53f318144d EF-DBFirst实现过程    http://www ...

最新文章

  1. mac OneNote恢复历史记录
  2. ELK环境搭建及client配置
  3. 通过神经图稳定对脑机接口的即插即用控制,四肢瘫痪患者可以轻松控制电脑光标...
  4. Go语言defer详解
  5. 禁止vim生成 un~文件
  6. SQL Server里那些我们应该知道的系统存储过程
  7. 企业数据分析,搞定这3个重点事半功倍!
  8. MyBatis 动态 SQL(认真看看, 以后写 SQL 就爽多了)
  9. java_eclipse中添加外部动态链接库(dll文件)的三种方式
  10. 为什么抢不到红包的总是你?可能是家里路由器没放对
  11. Reactor与Netty基本操作流程总结
  12. 不升级IE9的五大理由
  13. jQuery 常用API
  14. 访问oracle索引需要什么权限,Oracle索引 权限
  15. STM32内部FLASH使用简易流程
  16. Redis数据类型及编码
  17. 您的计算机存在远程桌面连接,远程桌面无法连接,详细教您电脑远程桌面无法连接怎么办...
  18. PHP 与 JSP 比较(PHP、ASP、JSP是什么)
  19. RedHat 8 dnf源配置
  20. python控制多个屏幕_使用Python控制屏幕

热门文章

  1. ASP.NET Core Docker Jenkins 零基础持续集成实战
  2. [精讲-3]Offline Domain Join
  3. js 实现网页显示倒计时
  4. wdcp支持两种安装方式
  5. 西瓜仿站高手v1.08官方正式版
  6. [Array]Majority Element
  7. 查看游戏服务器ip地址网站,如何查看游戏服务器IP地址
  8. Mybatis源码阅读(四):核心接口4.2——Executor(下)
  9. [转载] C++灵魂所在之---多态的前世与今生
  10. c语言定义5个元素数组, 对数组进行从小到大排序,定义一个5行5列的二维数组,并动态赋值,将第3列的数组进行从小到大的排序...