EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?
场景描述:项目中存在两个迁移 Teacher 和 TeachingPlan ,TeachingPlan 在 Teacher 之后创建,并且已经执行 dotnet ef database update 将新迁移应用到数据库。此时,因为实体修改,我们希望删除 TeachingPlan 迁移然后创建新的 TeachingPlan 迁移,该怎么办?
示例:查看迁移列表
dotnet ef migrations list
Build started...
Build succeeded.
20211026071835_Teacher
20211108141706_TeachingPlan
分析:直接移除 TeachingPlan 行不行?我们先试试。
示例:移除最后一个迁移
dotnet ef migrations remove
Build started...
Build succeeded.
The migration '20211108141706_TeachingPlan' has already been applied to the database. Revert it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration instead.
移除失败:迁移已经应用到数据库。如果该迁移已经应用于其他数据库,请考虑用一个新的迁移来恢复其变化。
根据错误提示,建议我们再创建一个新的迁移,比如:TeachingPlan_01 ,这样能够达到效果,但是不够简洁,存在多个作用相同的迁移。
重新梳理思路:在移除迁移之前,先将数据库恢复到数据迁移之前的状态。使用 dotnet ef database update [miagration_anme] 可以将数据库架构恢复到指定迁移时的状态。
示例:将数据库恢复到 Teacher
dotnet ef database update Teacher
然后移除 TeachingPlan 迁移
dotnet ef migrations remove
移除成功!此时迁移和数据库结构都恢复到 Teacher 状态,再重新创建迁移:
dotnet ef migrations add TeachingPlan
迁移回退任务完成!
小结:
- 迁移具有前后连贯性,迁移和数据架构应保持一致性。应避免删除已应用到生产数据库的任何迁移。
dotnet ef migrations remove不带参数,每执行一次,则移除最新创建的迁移。dotnet ef database update可以将数据库更新到任何一个指定迁移时的架构。
EF Core 小技巧:迁移已经应用到数据库,如何进行迁移回退操作?的更多相关文章
- MySql 使用 EF Core 2.0 CodeFirst、DbFirst、数据库迁移(Migration)介绍及示例
dotnet core 2.0 发布已经好几天了,期间也把原来 dotnet core 1.1 的 MVC 项目升级到了 2.0,升级过程还是比较顺利的,变动也不是太多.升级的过程中也少不了 Enti ...
- EF Core 2.0中如何手动映射数据库的视图为实体
由于Scaffold-DbContext指令目前还不支持自动映射数据库中的视图为实体,所以当我们想使用EF Core来读取数据库视图数据的时候,我们需要手动去做映射,本文介绍如何在EF Core中手动 ...
- .Net Core小技巧 - Swagger适配虚拟目录及二级目录
前言 随着前后端分离模式与微服务架构的出现,Web API变得越来越重要及普遍.而后出现的网关技术,使开发者更倾向于使用二级/多级目录来暴露Web API,一是暴露的端口更少,方便管理:二是在网关中可 ...
- EF Core 小坑:DbContextPool 会引起数据库连接池连接耗尽
DbContextPool 是 ASP.NET Core 2.1 引入的新特性,可以节省创建 DbContext 实例的开销,但没有想到其中藏着一个小坑. 最近有一个 ASP.NET Core 项目持 ...
- .Net Core小技巧 - Hosted Services + Quartz实现定时任务调度
背景 之前一直有朋友问,.Net Core + Linux环境有没有类似Windows服务的东西.其实是有的,我了解的方法有两种: #1 创建一个ASP.Net Core的Web项目(如Web API ...
- .Net Core小技巧 - 使用Swagger上传文件
前言 随着前后端分离开发模式的普及,后端人员更多是编写服务端API接口.调用接口实现文件上传是一个常见的功能,同时也需要一个选择文件上传的界面,可以编写前端界面上传,可以使用Postman.curl来 ...
- ASP.NET Core小技巧
设定开发环境为开发模式,呈现具体错误内容 dotnet run启动时,会在环境变量中查找ASPNETCORE_ENVIRONMENT变量的值,如果没有,则默认会当做Production来处理,隐藏错误 ...
- 在.NET Core类库中使用EF Core迁移数据库到SQL Server
前言 如果大家刚使用EntityFramework Core作为ORM框架的话,想必都会遇到数据库迁移的一些问题. 起初我是在ASP.NET Core的Web项目中进行的,但后来发现放在此处并不是很合 ...
- 在.net core程序中使用EntityFrameok(非EF Core)
最近用NoSQL较多写,用传统的EF到不多,但在一些.net core小程序中也小试牛刀过,不过当时用的是微软为.net core量身定制的Entity Framework Core,只是一些比较常规 ...
随机推荐
- 一生挚友redo log、binlog《死磕MySQL系列 二》
系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...
- hibernate 初学
1. hibernate的基本操作 执行流程: 执行流程细节:基本的配置文件 可以与mybatis进行对比着记 hibernate 的主键生成策略 ...
- 使用python3中的2to3.py执行数据迁移
1.在python默认安装的位置找到Tools\scripts 2.找到2to3.py 3.在所在文件夹shift+右键打开终端 4.执行命令python 2to3.py -w 需要做数据迁移的数据路 ...
- 关于java中BigDecimal的简介
关于java中BigDecimal的简介 1.BigDecimal属于大数据,精度极高,不属于基本数据类型,属于java对象(引用数据类型), 这是sun提供的一个类,专门用在财务软件中. 2.注意: ...
- supervisor + celery 的简单配置与报错处理
ubuntu服务器下使用 supervisor 和 celery supervisor 的卸载过程: sudo apt purge supervisor whereis supervisord如果有用 ...
- 用Fiddler抓不到https的包?因为你姿势不对!往这看!
前言 刚入行测试的小伙伴可能不知道,Fiddler默认抓http的包,如果要抓https的包,是需要装证书的!什么鬼证书?不明白的话继续往下看. Fiddler 抓取 https 数据 第一步:下载 ...
- 在windoes server2008部署kettle遇到的问题
本机电脑是windows10,在部署ketle时一切顺利,但在windows server2008服务器上部署,各种报错,毕竟线上环境比较复杂-- 问题一:启动kettle的spoon.bat文件时, ...
- windows下编译caffe出现错误 C4996: 'std::_Copy_impl': Function call with parameters that may be unsafe?
解决方案来自http://blog.csdn.net/u012556077/article/details/50353818
- 用 @Value("${xxxx}")注解从配置文件读取值的用法
1. 用法: 从配置properties文件中读取init.password 的值. @Value("${init.password}") private String init ...
- c语言中for循环 和嵌套for循环
for循环:for( ; ; )里面是bai3个语句,两个分号.第一个语句是开始前执行,第二个语句是判断真假,如果真,就执行后面(大括号内)的代码.第三个语句是每次执行完毕后执行的东西,通常第三个语句 ...