迁移概述
在实际项目中,数据模型随着功能的实现而变化:添加和删除新的实体或属性,并且需要相应地更改数据库架构,使其与应用程序保持同步。 EF Core 中的迁移功能能够以递增方式更新数据库架构,使其与应用程序的数据模型保持同步,同时保留数据库中的现有数据。
- 当引入数据模型更改时,开发人员使用 EF Core 工具添加相应的迁移,以描述使数据库架构保持同步所需的更新。EF Core 将当前模型与旧模型的快照进行比较,以确定差异,并生成迁移源文件;文件可在项目的源代码管理中进行跟踪,如任何其他源文件。
- 生成新的迁移后,可通过多种方式将其应用于数据库。 EF Core 在一个特殊的历史记录表中记录所有应用的迁移,使其知道哪些迁移已应用,哪些迁移尚未应用。
使用.NET Core CLI进行数据迁移
安装工具dotnet ef
dotnet tool install --global dotnet-ef
dotnet ef 命令
三个命令database、dbcontext、migrations(数据库,上下文、迁移)
命令 | 子命令 | 用法 |
---|---|---|
Database | drop | 删除数据库 |
update | 将数据库更新为指定的迁移 | |
DbContext | info | 获取有关DbContext类型的信息 |
list | 列出可用的DbContext类型 | |
scaffold | 为数据库提供DbContext和实体类型 | |
Migrations | add | 添加新的迁移 |
list | 列出可用的迁移 | |
remove | 删除上一次迁移 | |
script | 从迁移生成SQL脚本 |
命令组成:dotnet ef 命令 子命令
向项目添加工具包Microsoft.EntityFrameworkCore.Design才能对项目进行数据库迁移工作
dotnet add package Microsoft.EntityFrameworkCore.Design
添加迁移
生成对应迁移文件
执行迁移
首次创建迁移文件
首次执行迁移将生成数据库
更新模型后添加迁移文件用来更新数据库
添加新迁移文件,数据库上下文模型快照更新并生成新的迁移文件
执行新迁移文件,数据库更新
回滚删除迁移
删除迁移只能删除最新添加但未执行的迁移,如果要删除已经执行的迁移需要用dotnet ef database update xxx回滚到对应迁移版本,再用dotnet ef migrations remove(删除最后一个迁移) 删除掉回滚到对应迁移版本之后的迁移版本。
添加迁移未执行可以直接删除
回滚到指定迁移版本需要删除删除掉回滚到指定迁移版本之后的迁移版本。使用database update xxx回滚不会自动删除回滚到指定迁移版本后的迁移文件,需要手动执行迁移删除。
如果删除了迁移但是未对模型进行对应删除迁移相应修改操作的话,此时再次添加新的迁移文件将会和上次迁移文件的内容一样,说明迁移文件是根据模型与数据库上下文模型快照对比差异生成的。模型与数据库上下文模型快照对比决定迁移文件内容,但模型不会受迁移回滚而回滚,需要删除迁移文件后手动修改模型才能使模型和数据库同步。
参考:
https://docs.microsoft.com/zh-cn/ef/core/cli/dotnet#dotnet-ef-migrations-remove
https://www.entityframeworktutorial.net/efcore/cli-commands-for-ef-core-migration.aspx