ASP.NET Core 8.0学习笔记(二十七)——数据迁移:Migrations深入与其他迁移命令

ops/2025/2/27 20:30:36/

一、数据库架构的管理

1.EF Core提供两种方式来保持EF Core的模型与数据库保持同步。
(1)以数据库为准:反向工程(Db First),适用于中大型工程
(2)以代码为准:数据迁移(Code First),适用于小型工程
2.关于Nuget包:Microsoft.EntityFrameworkCore.Design:常用于反向工程 Tools:数据迁移
3.迁移方式:
(1)当引入的数据模型更改时,添加迁移操作时,EF Core将当前模型与旧模型的快照进行比较,确定差异并生成迁移源文件
注意:主要是比较模型类与模型配置类(IEntityTypeConfiguration接口实现类以及DbContext类)修改前后的差异(修改前的代码保存在快照当中),然后生成对应的迁移脚本
(2)生成新的迁移后,迁移的记录将保存在Migration文件夹中。EF也将在数据库中记录所有的迁移变化

二、深入研究Migrations中的两个方法

1.获取Migrations脚本:新建实体类与配置类,以及DbContext,然后执行数据库迁移指令,观察生成的数据库脚本:
实体模型:
在这里插入图片描述

配置类:
在这里插入图片描述

数据库上下文类:
在这里插入图片描述

执行数据库迁移指令:
在这里插入图片描述

生成的Migration脚本如下:
在这里插入图片描述

2.引入概念:
(1)向上迁移、向下迁移:使用迁移脚本,可以对当前连接的数据库执行编号更高的迁移,这个操作叫做向上迁移(Up),也可以执行将数据库回退到旧的迁移,这个操作称为“向下迁移”。
(2)注:除非有特殊需要,否则不要删除Migrations文件夹下的代码(回退数据库版本使用)
3.代码分析:
(1)根目录下的文件
在这里插入图片描述

(2)Intial.cs的Up与Down方法:
Up:生成这张表或执行更新操作所需要的代码脚本
Down:回退当前操作所需要执行的代码
在这里插入图片描述

若在实体中添加一个属性Height,同样执行数据库迁移命令,生成的脚本如下:
在这里插入图片描述

注意,在生成的数据库中会有一张表,用于记录Migration记录,若随意删除则会报错。
4.但是Migration文件夹中的文件也不是一定不能删除。一般情况下只需要将生成的数据库整个删除以后,再删掉Migrations文件夹即可。此时重新运行Add-Migration命令以及update-database就不会出现任何问题。(因为快照等都被删除了,等于重新开始建库)
三、其他的Migration迁移指令
1.Update-Database XXX:将数据库回滚到XXX的状态,迁移脚本不动
在这里插入图片描述

数据库回滚到Initial状态
2.删除最后一次的迁移脚本:Remove-Migration
在这里插入图片描述

3.Script-Migration:生成迁移Sql代码。Update-Database可以更新数据库,执行该命令可以生成SQL的更新脚本,手动更新数据库,有利于DBA对数据库进行管理以及恢复。
在这里插入图片描述

五、重置迁移

1.若需要重置所有迁移,但是又需要保留测试数据,可以按照以下方法操作:
(1)删除Migrations文件夹
(2)删除对应数据库中__EFMigrationsHistory表中的数据(不是删除表,只是清除数据)
(3)创建新的迁移并为其生成SQL脚本
(4)在数据库的迁移记录表(__EFMigrationsHistory)中插入一行,以记录刚才的迁移已经应用
2.示例:
(1)删除Migrations文件夹,重新执行Migration:
在这里插入图片描述

(2)删除数据库中的__EFMigrationHistory表中的数据
(3)将迁移的脚本所产生的数据直接插进迁移记录表中:(相当于手动执行update-database)
在这里插入图片描述

(4)修改一下代码,重新应用迁移:将People表的Name属性的最大长度由50改为64:
在这里插入图片描述

查看数据库
在这里插入图片描述

且其他表的数据都没有受到影响。


http://www.ppmy.cn/ops/161766.html

相关文章

Python----数据分析(Numpy四:广播机制,数组的运算,统计计算,where函数)

一、数组的广播机制 通常情况下,为了进行元素级的算术运算,两个数组的形状必须完全一致,Numpy的广播机制,它提供了一种规则,能够将不同形状的两个计算数 组广播到相同形状,然后再去进行元素级的算术运算&am…

Vulhub靶机 Apache APISIX命令执行 (CVE-2020-13945)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 漏洞范围 Apache APISIX 1.2~1.5 二、访问靶机IP 9080端口 1、拼接apisix/admin/routes路由 发现其特征为failed to check token 2、抓取当前页面的包,并修改为post请求,添…

HGAME2025 Week1

目录 Level 24 PacmanLevel 47 BandBombLevel 25 双面人派对Level 69 MysteryMessageBoardLevel 38475 ⻆落 Level 24 Pacman 直接在js文件里面搜索score, 可以找到一个flag, 经过base64和栅栏解密可以发现是一个假的flag 在尝试搜索一下gift, 可以找到另一个flag, 依次解码就…

React + TypeScript 数据模型驱动数据字典生成示例

React TypeScript 数据模型驱动数据字典生成示例 引言:数据字典的工程价值 在现代化全栈开发中,数据字典作为业务实体与数据存储的映射桥梁,直接影响系统可维护性与团队协作效率。传统手动维护字典的方式存在同步成本高和版本管理混乱两大痛…

Uniapp 小程序:语音播放与暂停功能的实现及优化方案

界面部分 //开启语音 <button class"open" v-if"showPlayfalse" click"playText">这是开启播放的图片</button >//关闭语音 <button class"close" v-if"showPlaytrue" click"stopText">这是…

Java异常类型

一、异常体系架构 1.1 体系图解 1.2 Exception & Error Exception 表示程序可以处理的异常情况&#xff0c;通常是由于程序逻辑错误或运行时问题引起的&#xff0c;比如NullPointException、IOException等。这些异常是设计用来被程序捕获&#xff0c;并采取相应的恢复措施…

【SQLI】sqlmap测试过滤规则和tamper有效性的方法

sqlmap测试过滤和tamper有效性的方法 1. 检测被过滤的字符或关键字2. 测试有效的 Tamper 脚本3. 自动化过滤检测4. 自定义 Tamper 脚本示例命令总结注意事项 使用 sqlmap 测试过滤规则和确定有效 tamper 脚本的步骤如下&#xff1a; 1. 检测被过滤的字符或关键字 方法一&#…

计算机毕设-基于springboot的仁和机构的体检预约系统的设计与实现(附源码+lw+ppt+开题报告)

博主介绍&#xff1a;✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围&#xff1a;Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…