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

一、数据库架构的管理

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.mzph.cn/bicheng/71722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 基本语法的详细解释

目录 (1)注释 (2)缩进 (3)变量和数据类型 变量定义 数据类型 (4)输入和输出 输出:print() 函数 输入:input() 函数 (1)注释 注…

20-R 绘图 - 饼图

R 绘图 - 饼图 R 语言提供来大量的库来实现绘图功能。 饼图,或称饼状图,是一个划分为几个扇形的圆形统计图表,用于描述量、频率或百分比之间的相对关系。 R 语言使用 pie() 函数来实现饼图,语法格式如下: pie(x, l…

Ubuntu 22.04 一键部署MinerU1.1.0

MinerU MinerU是一款将PDF转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。 MinerU诞生于书生-浦语的预训练过程中,我们将会集中精力解决科技文献中的符号转化问题,希望在大模型时代为科技发…

紫光同创开发板使用教程(二):sbit文件下载

sbit文件相当于zynq里面的bit文件,紫光的fpga工程编译完成后会自动生成sbit文件,因工程编译比较简单,这里不在讲解工程编译,所以我这里直接下载sbit文件。 1.工程编译完成后,可以看到Flow列表里面没有报错&#xff0c…

DeepSeek 部署全指南:常见问题解析与最新技术实践

引言 随着开源大模型DeepSeek的爆火,其部署需求激增,但用户在实际操作中常面临服务器压力、本地部署性能瓶颈、API配置复杂等问题。本文结合2025年最新技术动态,系统梳理DeepSeek部署的核心问题与解决方案,并分享行业实践案例&am…

Vue02

Vue02 绑定class样式 字符串写法,适用于:样式的类名不确定,需要动态指定 数组写法,适用于:要绑定的样式个数不确定,名字也不确定 对象写法,适用于:要绑定的样式个数缺点&#xff…

超导量子计算机的最新进展:走向实用化的量子革命

超导量子计算机的最新进展:走向实用化的量子革命 大家好,我是 Echo_Wish,今天我们来聊聊科技圈最炙手可热的话题之一——超导量子计算机。近年来,量子计算领域可谓是风起云涌,而超导量子计算机作为主流路线之一,已经在学术界和工业界取得了不少突破性进展。 那么,超导…

LangChain构建行业知识库实践:从架构设计到生产部署全指南

文章目录 引言:行业知识库的进化挑战一、系统架构设计1.1 核心组件拓扑1.2 模块化设计原则二、关键技术实现2.1 文档预处理流水线2.2 混合检索增强三、领域适配优化3.1 医学知识图谱融合3.2 检索结果重排序算法四、生产环境部署4.1 性能优化方案4.2 安全防护体系五、评估与调优…

Node.js中如何修改全局变量的几种方式

Node.js中如何修改全局变量。我需要先理解他们的需求。可能他们是在开发过程中遇到了需要跨模块共享数据的情况,或者想要配置一些全局可访问的设置。不过,使用全局变量可能存在一些问题,比如命名冲突、难以维护和测试困难,所以我得…

【Node.js】express框架

目录 1初识express框架 2 初步使用 2.1 安装 2.2 创建基本的Web服务器 2.3 监听方法 2.3.1 监听get请求 2.3.2 监听post请求 2.4 响应客户端 2.5 获取url中的参数(get) 2.5.1 获取查询参数 2.5.2 获取动态参数 2.6 托管静态资源 2.6.1 挂载路径前缀 2.6.2 托管多…

Vulhub靶机 Apache Druid(CVE-2021-25646)(渗透测试详解)

一、开启vulhub环境 docker-compose up -d 启动 docker ps 查看开放的端口 1、漏洞范围 在Druid0.20.0及更低版本中 二、访问靶机IP 8888端口 1、点击Load data进入新界面后,再点击local disk按钮。 2、进入新界面后,在标红框的Base directory栏写上…

【c语言】函数_作业详解

前言&#xff1a; 对应鹏哥专升本c语言&#xff0c;51集 内容&#xff1a; 找出10个数值中的最大值&#xff0c; #include <stdio.h> //求10个整数中的最大值 int main() {//准备10个整数 //int arr[10] {1,2,3,4,13,6,7,8,9,-2};//用于循环10次int i 0;//也可以自…

计算机网络之路由协议(自治系统)

一、自治系统&#xff08;AS&#xff09; 自治系统是由同一个技术管理机构管理、使用统一选路策略的一些路由器的集合。它是网络的基本构成单位&#xff0c;每个自治系统是一个独立运营并自主决定与谁交换流量的实体。自治系统内部运行内部网关协议&#xff08;IGP&#xff09…

【Unity】Unity clone 场景渲染的灯光贴图异位问题

Unity clone 场景渲染的灯光贴图异位问题 问题 需要将一个场景clone 一份保存到本地 当克隆完成后&#xff0c;副本场景的灯光贴图异位了&#xff0c;与原场景存在较大的差别 问题原因 场景被clone 后&#xff0c;场景的灯光渲染数据不能共用&#xff0c;即Lightmapping.li…

Python----数据分析(Numpy一:numpy库简介,与list列表的区别,数组的创建,随机数组的创建)

一、 Numpy库简介 1.1、概念 NumPy(Numerical Python)是一个开源的Python科学计算库&#xff0c;旨在为Python提供 高性能的多维数组对象和一系列工具。NumPy数组是Python数据分析的基础&#xff0c;许多 其他的数据处理库&#xff08;如Pandas、SciPy&#xff09;都依赖于Num…

千峰React:函数组件使用(2)

前面写了三千字没保存&#xff0c;恨&#xff01; 批量渲染 function App() {const list [{id:0,text:aaaa},{id:1,text:bbbb},{id:2,text:cccc}]// for (let i 0; i < list.length; i) {// list[i] <li>{list[i]}</li>// }return (<div><…

Hot100 动态规划

动态规划 动规五部曲&#xff1a; 确定dp数组以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 70. 爬楼梯 - 力扣&#xff08;LeetCode&#xff09; 爬到第一层楼梯有一种方法&#xff0c;爬到二层楼梯有两种方法。 那么第一层楼梯再跨两步就到第三…

Rust语言基础知识详解【一】

1.在windows上安装Rust Windows 上安装 Rust 需要有 C 环境&#xff0c;以下为安装的两种方式&#xff1a; 1. x86_64-pc-windows-msvc&#xff08;官方推荐&#xff09; 先安装 Microsoft C Build Tools&#xff0c;勾选安装 C 环境即可。安装时可自行修改缓存路径与安装路…

文章精读篇——OMG-Seg

题目&#xff1a;OMG-Seg : Is One Model Good Enough For All Segmentation? 作者&#xff1a;Xiangtai Li1 † Haobo Yuan1 Wei Li1 Henghui Ding1 Size Wu1 Wenwei Zhang1Yining Li2 Kai Chen2 Chen Change Loy1 代码&#xff1a;OMG-Seg 会议&#xff1a;cvpr2024 边读…

vite 开启 gzip压缩

使用vite 如何开启 gzip压缩 文章目录 使用vite 如何开启 gzip压缩1. 引言为什么需要 Gzip 压缩&#xff1f;Gzip 压缩的作用 2. Vite 项目中的 Gzip 压缩Vite 的基本概念Gzip 压缩的原理 3. 使用 Vite 插件开启 Gzip 压缩安装 vite-plugin-compression配置 vite-plugin-compre…