当前位置: 首页 > news >正文

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

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.lryc.cn/news/543125.html

相关文章:

  • web安全——web应用程序技术
  • low rank decomposition如何用于矩阵的分解
  • GO 进行编译时插桩,实现零码注入
  • 编写一个程序,输入一个字符串并输出其长度(Java版)
  • C++ day4 练习
  • 深入理解指针2
  • 【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级
  • CPU、SOC、MPU、MCU--详细分析四者的区别
  • Node.js 内置模块简介(带示例)
  • 常见的“锁”有哪些?
  • 二级公共基础之数据库设计基础(一) 数据库系统的基本概念
  • ollama无法通过IP:11434访问
  • 简单易懂,解析Go语言中的struct结构体
  • java给钉钉邮箱发送邮件
  • C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化
  • 大连本地知识库的搭建--数据收集与预处理_01
  • github 推送的常见问题以及解决
  • stm32单片机个人学习笔记16(SPI通信协议)
  • Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作
  • BGP状态和机制
  • 温湿度监控设备融入智慧物联网
  • smolagents学习笔记系列(五)Tools-in-depth-guide
  • 前端面试真题 2025最新版
  • 面试八股文--数据库基础知识总结(1)
  • 10. docker nginx官方镜像使用方法
  • [Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例
  • es-head(es库-谷歌浏览器插件)
  • 第二十:【路由的props配置】
  • Vue 2全屏滚动动画实战:结合fullpage-vue与animate.css打造炫酷H5页面
  • AF3 DataPipeline类process_pdb 方法解读