前面我们介绍过EFCore使用Code First开发流程,我们首先在代码中定义数据模型,然后由EFCore框架根据数据模型生成数据迁移脚本,最后执行数据迁移脚本同步修改到数据库中。我们可以在Visual Studio的程序包管理器控制台中执行数据迁移命令,不过注意这里需要使用NuGet安装Microsoft.EntityFrameworkCore.Tools
包,如果执行时报错找不到命令,可能是没有正确安装该依赖包。这篇笔记我们详细学习数据迁移相关的操作。
执行以下命令创建一个新的数据迁移,该迁移包含了对数据模型的变更描述。
Add-Migration <数据迁移名>
创建数据迁移后将在工程中生成Migrations
目录,其中包含数据迁移脚本的C#代码。对于数据迁移名,我们应该使用概括性的名词,清晰的表达本次迁移所做的更改,以便其他开发人员能够轻松理解。此外,我们应该使用PascalCase进行命名,避免特殊字符和空格。
执行以下命令会列出工程中的所有数据迁移。
Get-Migration
列出的内容包括数据迁移ID、数据迁移名、是否应用到数据库。
执行数据迁移到当前最新的数据迁移版本可以执行以下命令。
Update-Database
此外,我们也可以执行数据迁移到指定的数据迁移名。
Update-Database <数据迁移名>
我们可以观察数据迁移(Migrations)脚本,其中包含Up()
和Down()
两个方法,分别代表两种数据迁移方向。EFCore中数据迁移可以用于更新数据库,也可以用于回退。
向上迁移(UP):执行版本号更高的迁移。
向下迁移(DOWN):回退到版本号更低的迁移。
尽管我们可以手动删除数据迁移脚本文件,但手动操作有出错的可能,一旦删错文件弄乱整个数据迁移脚本就比较麻烦了。我们可以执行以下命令,通过该命令删除最后一个数据迁移。
Remove-Migration
实际开发中,我们通常没有生产数据库的操作权限,生产数据库变更一般需要通过提交SQL脚本给DBA来实现。EFCore支持根据数据迁移脚本生成SQL脚本,我们可以执行以下命令来实现。
Script-Migration
该命令会生成所有数据迁移变更的SQL脚本。
此外,我们也可以通过添加-From
和-To
参数来指定数据迁移的起始和结束迁移名,通过指定该参数可以生成增量迁移脚本或回退脚本。
Script-Migration -From <数据迁移名> -To <数据迁移名>
这里我们还要了解一个重要的概念,EFCore中我们的模型定义是数据库无关的,但生成的数据迁移脚本是数据库相关的,也就是说我们在MySQL下生成的数据迁移脚本如果放到其他数据库下直接使用Update-Database
执行就有出错的可能,因此如果出现切换数据库的情况,我们就需要重新生成数据迁移脚本。