Entity Framework Core 数据库迁移
一、如何保持模型和数据库架构的同步
EF Core 通过两种方式来保持模型和数据库架构同步。
- 以模型为准:迁移:根据模型生成数据库架构
- 以数据库架构为准:反向工程:根据数据库架构反向生成模型
二、管理迁移
管理迁移的两种方式
NET CLI:- 好处:跨平台
- 要求 :
- 安装
dotnet-ef tool - 启动项目安装
NuGet包Microsoft.EntityFrameworkCore.Design
- 安装
- 包管理控制台(vs)
- 要求:
- vs
- 启动项目安装
NuGet包Microsoft.EntityFrameworkCore.Tools
- 要求:
迁移的流程
migration生成Migrations相关文件update应用迁移 生成__EFMigrationsHistory记录

使用工具 EF Core CLI 来管理迁移
# 安装工具
dotnet tool install --global dotnet-ef
# 更新工具版本
dotnet tool update --global dotnet-ef
# 启动项目需要安装Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.Design
# 验证安装
dotnet ef
# 创建迁移InitialCreate
dotnet ef migrations add InitialCreate
# 应用迁移InitialCreate
dotnet ef database update
使用包管理控制台来管理迁移

# 在`包管理控制台`运行
# 启动项目需要安装`Microsoft.EntityFrameworkCore.Tools`
Install-Package Microsoft.EntityFrameworkCore.Tools
# 更新Tools Package
Update-Package Microsoft.EntityFrameworkCore.Tools
# 创建迁移
add-migration InitialCreate
# 应用迁移
update-database
三、其他命令
修改迁移文件生成路径
dotnet ef migrations add --output-dir Your/Directory
删除迁移
dotnet ef migrations remove
列出迁移
dotnet ef migrations list
检查挂起的模型更改
dotnet ef migrations has-pending-model-changes
context.Database.HasPendingModelChanges() 编程方式检查挂起
重置所有迁移
- 删除
migrations文件夹 - 清空
__EFMigrationsHistory表记录
生成迁移 SQL 脚本
# 将生成一个从空白数据库到最新迁移的 SQL 脚本
dotnet ef migrations script
# 生成一个从给定迁移(AddNewTables)到最新迁移的 SQL 脚本
dotnet ef migrations script AddNewTables
# 生成一个从指定 `from` 迁移到指定 `to` 迁移的 SQL 脚本
dotnet ef migrations script AddNewTables AddAuditTable
# 幂等 SQL 脚本 且只应用缺少的迁移。
dotnet ef migrations script --idempotent
捆绑包
解决了 SQL 脚本和命令行工具的一些缺点:
- 执行 SQL 脚本需要额外的工具。
- 这些工具的事务处理和出错时继续行为不一致,有时是意外的。 如果在应用迁移时发生故障,这会使你的数据库处于未定义状态。
- 捆绑包可以作为 CI 过程的一部分生成,并在以后作为部署过程的一部分轻松执行。
- 可以在不安装 .NET SDK 或 EF 工具(甚至是 .NET 运行时,如果是自包含)的情况下执行捆绑包,并且不需要项目的源代码。
# 生成捆绑包
dotnet ef migrations bundle
# 覆盖现有捆绑包
dotnet ef migrations bundle --force
# 生成 linux 捆绑包
dotnet ef migrations bundle --self-contained -r linux-x64
生成的可执行文件默认命名为 efbundle。 它可用于将数据库更新到最新迁移。 这相当于运行 dotnet ef database update 或 Update-Database。
# 利用捆绑包执行迁移 捆绑包使用应用程序配置中的数据库连接字符串。 但是,可以通过在命令行上传递连接字符串来迁移不同的数据库
.\efbundle.exe --connection 'Data Source=(local)\MSSQLSERVER;Initial Catalog=Blogging;User ID=myUsername;Password={;'$Credential;'here'}'

浙公网安备 33010602011771号