跳到主要内容
版本:Next

数据库迁移脚本使用

本文档引用的文件

目录​

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概述
  5. 详细组件分析
  6. 依赖分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介​

本文档旨在为开发人员提供关于如何使用 UpdateDB.bat 和 UpdateMigrations.bat 脚本进行数据库迁移的完整指南。这些脚本支持 MySQL、PostgreSQL 和 SQL Server 三种数据库平台,通过集成 EF Core 的迁移机制,实现数据库 Schema 的更新与数据迁移。文档还将解释运行时迁移器(CMSPluginRuntimeMigrator)与设计时脚本之间的协同工作机制,确保数据库结构与代码模型保持一致。

项目结构​

本项目采用模块化设计,各数据库平台(MySQL、PostgreSQL、SQL Server)分别拥有独立的项目结构,包含各自的 DbContext、DbContextFactory 以及迁移脚本。所有迁移脚本均位于各自平台项目的 Scripts 目录下。

Diagram sources

Section sources

核心组件​

系统的核心迁移机制由多个组件协同工作:设计时的批处理脚本(UpdateDB.bat 和 UpdateMigrations.bat)用于生成和应用迁移,而运行时的 CMSPluginRuntimeMigrator 则在应用程序启动或项目加载时自动执行数据库迁移,确保环境一致性。

Section sources

架构概述​

系统采用分层架构,将数据库迁移逻辑分为设计时和运行时两个阶段。设计时通过 EF Core CLI 命令生成和更新迁移文件;运行时通过依赖注入的服务自动执行迁移。

Diagram sources

详细组件分析​

设计时迁移脚本分析​

UpdateMigrations.bat 脚本​

该脚本用于生成新的迁移文件。其主要功能是进入项目根目录并执行 dotnet ef migrations add 命令,创建初始迁移或后续更新迁移。脚本中注释部分提供了添加后续迁移的示例命令。

Diagram sources

UpdateDB.bat 脚本​

该脚本用于将已生成的迁移应用到目标数据库。它通过 dotnet ef database update 命令执行所有待应用的迁移,使数据库 Schema 与代码模型同步。

Diagram sources

运行时迁移机制分析​

CMSPluginRuntimeMigrator​

这是运行时迁移的核心组件,实现了 IProjectRuntimeMigrator 接口。当项目加载器 (IProjectRunner) 加载工程时,该组件会被调用,负责执行数据库迁移流程。

Diagram sources

Section sources

依赖分析​

系统各组件之间存在明确的依赖关系,遵循依赖倒置原则,通过接口和依赖注入实现松耦合。

Diagram sources

Section sources

性能考虑​

  • 迁移执行时机:设计时迁移应在开发阶段完成,避免在生产环境执行耗时的模式变更。
  • 批量迁移:UpdateDB.bat 会一次性应用所有待处理的迁移,建议在非高峰时段执行。
  • 连接管理:运行时迁移通过 DI 容器获取数据库连接,确保连接的正确生命周期管理。
  • 日志记录:所有迁移操作均有详细日志输出,便于监控和故障排查。

故障排除指南​

常见问题及解决方案:

  1. EF Core 工具未安装:确保已全局安装 dotnet-ef 工具。
  2. 数据库连接失败:检查 appsettings.json 中的连接字符串配置。
  3. 迁移冲突:多人开发时,应协调迁移文件的添加,避免冲突。
  4. 运行时迁移不执行:确认 CMSPluginRuntimeMigrator 已正确注册到 DI 容器。
  5. 平台特定问题:不同数据库平台可能有语法差异,需在目标平台上测试迁移脚本。

Section sources

结论​

本文档详细介绍了基于 EF Core 的多数据库平台迁移机制。通过 UpdateMigrations.bat 和 UpdateDB.bat 脚本实现设计时的迁移管理,结合 CMSPluginRuntimeMigrator 实现运行时的自动迁移,形成了完整的数据库版本控制方案。该机制确保了开发、测试和生产环境之间数据库结构的一致性,提高了系统的可靠性和可维护性。