数据迁移

前面我们介绍过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脚本

实际开发中,我们通常没有生产数据库的操作权限,生产数据库变更一般需要通过提交SQL脚本给DBA来实现。EFCore支持根据数据迁移脚本生成SQL脚本,我们可以执行以下命令来实现。

Script-Migration

该命令会生成所有数据迁移变更的SQL脚本。

此外,我们也可以通过添加-From-To参数来指定数据迁移的起始和结束迁移名,通过指定该参数可以生成增量迁移脚本或回退脚本。

Script-Migration -From <数据迁移名> -To <数据迁移名>

数据迁移脚本是数据库相关的

这里我们还要了解一个重要的概念,EFCore中我们的模型定义是数据库无关的,但生成的数据迁移脚本是数据库相关的,也就是说我们在MySQL下生成的数据迁移脚本如果放到其他数据库下直接使用Update-Database执行就有出错的可能,因此如果出现切换数据库的情况,我们就需要重新生成数据迁移脚本。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap