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

news/2025/2/25 17:25:17

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.niftyadmin.cn/n/5865762.html

相关文章

java23种设计模式-原型模式

原型模式&#xff08;Prototype Pattern&#xff09;学习笔记 &#x1f31f; 定义 原型模式属于创建型设计模式&#xff0c;通过复制现有对象&#xff08;原型&#xff09;来创建新对象&#xff0c;避免重复进行初始化操作。该模式的核心是实现对象的克隆能力。 &#x1f3af…

基于深度学习的SSD口罩识别项目完整资料版(视频教程+课件+源码+数据)

基于深度学习的SSD口罩识别项目完整资料版&#xff0c;包含视频教程、PPT课件和源码. 01 项目介绍.mp4 02 SSD算法原理回顾.mp4 03 数据集收集.mp4 04 自定义数据集.mp4 05 生成anchors.mp4 06 展示anchors.mp4 07 计算iou值.mp4 08 计算target.mp4 09 定义模型.mp4 10 模型训练…

【开关电源】汽车前端电源保护电路设计

前言&#xff1a; 汽车电池端子在启动或者保养过程中被反接&#xff0c;如果对这些故障不能及时处理&#xff0c;就可能导致ECU或供电设备被损坏&#xff1b;此外在供电过程中电压也存在不稳定的情况。在EMC测试中ISO16750和ISO7637也会有负电压的情况。 肖特基二极管和 P 沟道…

抖音营销创新策略与案例分析:以奈雪的茶为例及开源AI智能名片2+1链动模式S2B2C商城小程序的启示

摘要&#xff1a;随着互联网技术的快速发展&#xff0c;社交媒体平台已成为品牌推广和市场营销的重要阵地。抖音作为短视频领域的佼佼者&#xff0c;凭借其庞大的用户基础和强大的算法推荐机制&#xff0c;为众多品牌提供了广阔的营销空间。本文以奈雪的茶在抖音的6周年营销活动…

计算机视觉算法

计算机视觉算法简介 计算机视觉(Computer Vision)作为人工智能的一个重要分支,致力于让计算机能够“看”并理解图像或视频中的内容。其应用领域广泛,从自动驾驶汽车、医疗影像分析到增强现实和安全监控等。随着深度学习技术的发展,计算机视觉已经取得了显著的进展,尤其是…

ARM-Linux 基础项目篇——简单的视频监控

该基础项目为后面的 AI 安防项目做铺垫。使用 Qt 的网络编程方案来实现&#xff0c;后期再实现流媒体协议的方案。使用 ov2640 摄像头。 一、实现流程 &#xff08;1&#xff09; 服务器采集摄像头的数据。 &#xff08;2&#xff09; 处理视频数据转交给 Socket&#xff0c;…

CSS滚动条原理与自定义样式指南,CSS滚动条样式失效,滚动条样式无效,-webkit-scrollbar无效,overflow不显示滚动条

滚动内容形成的必要条件 CSS Overflow属性解析 MDN官方文档-Overflow属性 菜鸟教程-Overflow属性 overflow 属性控制内容溢出元素框时在对应的元素区间内是否添加滚动条。 值描述visible默认值。内容不会被修剪&#xff0c;会呈现在元素框之外。hidden内容会被修剪&#xf…

FastExcel 实现数据分批次导入、导出

是基于 FastExcel 实现数据分批次导入和保存的完整解决方案&#xff0c;结合了高性能流式读取与分批处理机制&#xff1a; 一、环境准备 依赖配置 <dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version&…