Loading

Entity Framework Core 数据库迁移

一、如何保持模型和数据库架构的同步

EF Core 通过两种方式来保持模型数据库架构同步。

  • 以模型为准:迁移:根据模型生成数据库架构
  • 以数据库架构为准:反向工程:根据数据库架构反向生成模型

二、管理迁移

管理迁移的两种方式

  • NET CLI
    • 好处:跨平台
    • 要求 :
      • 安装dotnet-ef tool
      • 启动项目安装NuGetMicrosoft.EntityFrameworkCore.Design
  • 包管理控制台(vs)
    • 要求:
      • vs
      • 启动项目安装NuGetMicrosoft.EntityFrameworkCore.Tools

迁移的流程

  1. migration 生成Migrations相关文件
  2. 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() 编程方式检查挂起

重置所有迁移

  1. 删除migrations文件夹
  2. 清空__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'}'
posted @ 2025-03-12 07:46  toyz、  阅读(215)  评论(0)    收藏  举报