第4章 4.4 EF Core数据库迁移 Add-Migration UpDate-Database

news/2025/2/27 0:50:57/

4.4.1 数据库迁移原理

 

总结一下就是:

1. 数据库迁移命令的执行,其实就是生成在数据库执行的脚本代码(两个文件:数字_迁移名.cs     数字_迁移名.Designer.cs),用于对数据库进行定义和修饰。

2. 数据库迁移有两个方法 【向上】和【向下】,个人理解:其实向上就是更新,向下就是还原上一版本。

演示一下。假设先已完成环境搭建,且创建了一个新的表格T_Dogs,模式如下:

public class Dog
{public long ID { get; set; }public string Name { get; set; }
}

现在给这个数据库增加一列,【Age】

public class Dog
{public long ID { get; set; }public string Name { get; set; }public int Age { get; set; }
}

然后 Add-Migration AddColumnAge

执行成功后观察项目目录,已经生成了对应的脚本文件:

然后检查这个脚本文件会发现,文件里有两个方法:Up:执行新增这一列的操作 Down:执行删除这一列的操作 ,代码如下:

public partial class AddColumnAge : Migration
{/// <inheritdoc />protected override void Up(MigrationBuilder migrationBuilder){migrationBuilder.AddColumn<int>(name: "Age",table: "T_Dogs",type: "int",nullable: false,defaultValue: 0);}/// <inheritdoc />protected override void Down(MigrationBuilder migrationBuilder){migrationBuilder.DropColumn(name: "Age",table: "T_Dogs");}
}

然后更新数据库:update-database

更新完成后查看数据库已完成新增这一列:

然后查看数据库的脚步执行历史,最后执行的就是刚才迁移时生成的脚本(20250223071051_AddColumnAge):

4.4.2 其他数据库迁移命令

当然,数据库迁移不光只有update-database和Add-Migration,EF Core还提供了一些其他的命令。下面介绍几个常用的:

1. update-database其他参数

update-database 【这里写迁移命令时的名称,可以将数据库回滚或者升级到对应的版本】

2. 删除迁移脚本Remove-migration

Remove-migration命令,删除最后一次的迁移脚本

3. 生成迁移脚本Script-Migration

在开发环境中可以随意使用update-database进行数据库更改迁移,但如果要修改实际生成环境的数据库的话需要相关人员审计才能被允许修改。

对于这种场景, EF Core中提供了Script-Migration命令来根据迁移代码生成SQL脚本,这个脚本可以通过审计后在生产数据库中执行。

此外,如果数据库已经是迁移版本的状态了,比如已经是D版本,要升级到F版本,则可以Script-Migration D F 来生成D到F的升级的脚本

4.4.3 反向工程(慎用)

杨老师说:这是一个灾难及操作,别用它。哈哈哈,其实也还好,就是确实不太推荐,应为这种方式不符合“模型驱动的开发理念”。

意思就是手动维护数据库,然后用反向工程生成实体类。

生成时用指令:

Scafflod-DBContext ‘Server=.;Database=demo1;Trusted_Connection=True;’ Microsoft.EntityFrameworkCore.SqlServer


http://www.ppmy.cn/news/1575126.html

相关文章

OpenHarmony构建系统-GN与子系统、部件、模块理论与实践

理论 OpenHarmony源码体系 OpenHarmony的源码架构基于模块化设计&#xff0c;为了方便系统的功能的增加和裁剪&#xff0c;设计了基于GN构建的模块系统。整个模块可从大到小划分为产品(product)、领域/子系统集(domain)、子系统(sub system)、部件(component)、模块/组件(modu…

【SQL】SQL事务

&#x1f384;概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会将所有的操作作为一个整体一起向系统提交或者撤销。即事务要么同时成功,要么同时失败 ⭐示例 张三给李四转账 1000 块钱&#xff0c;张三银行账户的钱减少 1000 &#xff0c…

计算机网络之路由协议(OSPF路由协议)

一、定义与分类 OSPF是一种内部网关协议&#xff08;IGP&#xff09;&#xff0c;也属于链路状态路由协议。它使用链路状态路由算法&#xff0c;在单一自治系统&#xff08;AS&#xff09;内部工作。适用于IPv4的OSPFv2协议定义于RFC2328&#xff0c;而RFC5340则定义了适用于I…

Fisher信息矩阵与Hessian矩阵:区别与联系全解析

Fisher信息矩阵与Hessian矩阵&#xff1a;区别与联系全解析 在统计学和机器学习中&#xff0c;Fisher信息矩阵&#xff08;FIM&#xff09;和Hessian矩阵是两个经常出现的概念&#xff0c;它们都与“二阶信息”有关&#xff0c;常用来描述函数的曲率或参数的敏感性。你可能听说…

服务端获取远程ip的方法

在业务系统中&#xff0c;通常需要获取用户的真实ip地址对用户进行分析&#xff0c;nginx配置需要有相关的配置才行 1、nginx配置 #server模块配置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; prox…

Vue实践-ElementUI中Upload组件如何批量上传

ElementUI中Upload组件如何批量上传 首先就是upload组件 <el-uploadclass"upload-demo"ref"uploadFile"name"filedatas":headers"importHeaders":action"uploadAdminHost":auto-upload"false"multiple><…

Mono里运行C#脚本43—System.Console.WriteLine()函数的生成过程

前面可以看到脚本里会有下面的代码生成: IL_0005: call void class [mscorlib]System.Console::WriteLine(string) 现在就来分析这行代码的JIT的生成过程。 在这里调用的代码是库里代码,与前面内部嵌入的函数会不一样。并且它是一个类里的方法,这样也与前面的内部函数不…

MFC—加法器

1.需要为编辑框添加变量 2.在cpp文件中的按钮中添加代码 void CMFCAddtionDlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码UpdateData(true);//把控件里的值更新给变量m_add m_add1 m_add2;//加法UpdateData(false);//把控件相加的值赋值给控件 }