Migrations迁移脚本用于EF Core中使用Code First方式创建以及修改数据库操作。首次创建数据库后,后期也可以使用Migrations对数据库进行变更操作(如修改表结构、增加、删除表)。使用Migrations迁移脚本,可以对当前连接的数据库执行编号更高的迁移,这个操作叫做“向上迁移”(Up),也可以执行把数据库回退到旧的迁移,这个操作叫“向下迁移”(Down)。
首次使用Migrations创建数据库后,会在程序中生成Migrations文件夹,文件夹下面存放的是Migrations创建数据库运行代码,除非有特殊的需要,否则不要删除Migrations文件夹下的代码。同时会在数据库中生成__EFMigrationsHistory数据表,记录数据库创建更新记录。
创建数据库第一步必须先写EF Core相关程序《具体方法见:EF Core 实战教程(一)配置环境及使用code first 创建数据库》,主要包含实体类、实体类与数据库表格映射配置类以及DbContext上下文类三个类。
在程序包管理器控制台执行以下两条命令创建数据库。
PM>Add-Migration init
PM>Update-database
数据库创建完成后会在项目中生成Migrations文件夹,Migrations文件夹下是一些按照一定编号生成的每次更新数据库的执行脚本代码。
如下图:
以下代码是以Person实体类(只包含Id及Name属性)为例创建的数据库生成的Migrations创建脚本代码:
public partial class init : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( name: "Persons", columns: table => new { Id = table.Column<int>(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), Name = table.Column<string>(type: "nvarchar(max)", nullable: false) }, constraints: table => { table.PrimaryKey("PK_Persons", x => x.Id); }); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( name: "Persons"); } }
Person实体类代码:
public class Person { public int Id { get; set; } public string Name { get; set; } }
从以上代码可以看出,主要包含Up及Down两个方法,Up方法主要是创建数据表Persons的代码,而Down则是记录删除Persons的代码,Down代码主要就是给以后回退使用。
首先在Person实体类增加Height身高字段,代码如下:
public class Person { public int Id { get; set; } public string Name { get; set; } public int Height { get; set; } }
然后在程序包管理器控制台执行以下两条命令修改数据库。
PM>Add-Migration add-height
PM>Update-database
执行成功后在Migrations文件夹下面又增加了一个类,如下图:
20220917024056_add-height类代码如下:
public partial class addheight : Migration { protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.AddColumn<int>( name: "Height", table: "Persons", type: "int", nullable: false, defaultValue: 0); } protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropColumn( name: "Height", table: "Persons"); } }
从上的代码可以看出,还是包含Up及Down两个方法,Up是增加Height列的代码,Dwon是删除Height列的代码,用于以后回退本次对数据库的修改。
此时数据库__EFMigrationsHistory表数据如下:
回滚命令格式如下:Update-Database 回滚版本号。
如要删除上一步增加的height列,执行回滚到数据库创建的那一步即可,Update-Database 20220917020010_init命令就可以将数据库回滚到初始创建的状态,因为程序并没有删除增加height列的20220917024056_add-height代码文件,再次执行Update-Database命令,会在增加Height列。
说明:如果删除数据库中的数据库,执行Update-database+“回滚类文件名”命令,程序会创建数据库到“回滚类文件名”的状态,进行灵活的操作。
1、Update-Database XXX
把数据库升级或回滚到XXX的状态,迁移脚本不动。
2、Remove-migration
删除最后一次的迁移脚本,删除之前必须保证迁移脚本没执行到数据库的操作,如果执行需要回滚一下。
3、Script-Migration
生成迁移Sql代码,也就是操作数据库的sql脚本。可以使用Script-Migration A B生成中间版本的sql脚本。
以上方式只适合开发数据库的更新,不适合生产数据库(正式数据库)的更新,可以使用Script-Migration生成的脚本更新生产数据库。
- EF Core 实战教程(八)一对多关系配置(1124)
- EF Core 实战教程(四)EF Core如何设置主键(909)
- EF Core 实战教程(六)如何查看EF Core生成的Sql语句(892)
- EF Core 实战教程(七)通过读取appsetting.json数据库链接字符串链接数据库(820)
- EF Core 实战教程(三)Fluent Api配置详解(594)
- EF Core 实战教程(一)配置环境及使用code first 创建数据库(587)
- EF Core 实战教程(五)Migrations深入研究及使用详解(525)
- EF Core 实战教程(二)实现基本的查询、增加、修改、删除功能(514)
- 解决Asp.net Core Razor页面调试时无法实时更新(502)
- EF Core实现充血模型(477)
- 2025年3月 (1)
- 2024年6月 (2)
- 2024年5月 (2)
- 2024年4月 (4)
- 2024年3月 (30)
- 2024年1月 (4)
- 2023年12月 (2)
- 2023年11月 (4)
- 2023年10月 (4)
- 2023年9月 (6)
- 2023年3月 (2)
- 2023年2月 (1)
- 2023年1月 (1)
- 2022年12月 (1)
- 2022年9月 (21)
- 2022年8月 (10)
- 2022年7月 (3)
- 2022年4月 (1)
- 2022年3月 (13)
- 2021年8月 (1)
- 2021年3月 (1)
- 2020年12月 (42)
- 2020年11月 (7)
- 2020年10月 (5)
- 2020年8月 (1)
- 2020年6月 (1)
- 2020年3月 (2)
- 2019年12月 (8)
- 2019年11月 (3)
- 2019年9月 (1)
- 2019年4月 (1)
- 2019年3月 (6)
- 2019年2月 (1)
- 2018年7月 (7)
- 1.asp.net mvc内微信pc端、H5、JsApi支付方式总结(5702)
- 2.各大搜索网站网站收录提交入口地址(3201)
- 3.Windows 10休眠文件更改存储位置(3164)
- 4.ECharts仪表盘实例及参数使用详解(3095)
- 5.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(2992)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(2866)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(2784)
- 8.CERT_HAS_EXPIRED错误如何解决(2249)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2189)
- 10.HBuilder编辑器格式化代码(2118)