원클릭으로
db-migration
指导同时为 MySQL 和 SQL Server 创建数据库迁移。使用数据库特定的 DbContext,处理数据库差异,配置雪花ID。当用户需要创建迁移、修改实体、或遇到迁移错误时使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
指导同时为 MySQL 和 SQL Server 创建数据库迁移。使用数据库特定的 DbContext,处理数据库差异,配置雪花ID。当用户需要创建迁移、修改实体、或遇到迁移错误时使用。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
BMAD AI 工作流与 CodeSpirit 项目规范的集成技能。引导用户使用 BMAD 工作流,确保 BMAD 生成的文档和代码符合 CodeSpirit 规范。当用户提到 BMAD 工作流、需要完整开发流程管理、或执行 BMAD 命令时使用。
基于 CodeSpirit 项目规范进行系统化代码审查。检查安全、数据库、异步编程、多语言、DTO、控制器、服务类等规范。当用户需要审查代码、检查代码质量、或准备提交代码时使用。
提交前综合验证审阅。执行静态代码审查、运行时错误检查和功能验证。包括代码质量检查、Aspire应用日志分析、租户后台登录测试。当用户准备提交代码、需要全面验证、或要求提交前审查时使用。
指导在 CodeSpirit 项目中集成 AI 功能的完整开发流程。包括 AI 表单填充、AI 长任务处理、LLM 集成和提示词工程。当用户需要添加 AI 功能、集成 LLM、或开发 AI 驱动的业务功能时使用。
指导从 Entity 到 Controller 的完整 CRUD 功能开发流程。包括实体创建、DTO设计、服务实现、控制器开发、数据库配置和迁移。当用户需要开发新的 CRUD 功能、创建 API 接口、或添加新的业务模块时使用。
| name | db-migration |
| description | 指导同时为 MySQL 和 SQL Server 创建数据库迁移。使用数据库特定的 DbContext,处理数据库差异,配置雪花ID。当用户需要创建迁移、修改实体、或遇到迁移错误时使用。 |
CodeSpirit 项目支持 MySQL 和 SQL Server 双数据库,必须为每个数据库创建独立的迁移文件。
# MySQL 迁移
dotnet ef migrations add MigrationName --context MySql{Service}DbContext --output-dir Data/Migrations/MySql
# SQL Server 迁移
dotnet ef migrations add MigrationName --context SqlServer{Service}DbContext --output-dir Data/Migrations/SqlServer
MultiDatabaseDbContextBase (多数据库基类)
↓
{Service}DbContext (服务基础上下文,运行时使用)
↓
MySql{Service}DbContext / SqlServer{Service}DbContext (数据库特定上下文,用于迁移)
{Service}DbContext(如 ExamDbContext)MySql{Service}DbContext 或 SqlServer{Service}DbContextDatabaseSpecificConfigurations 类统一处理修改实体类或实体配置类(IEntityTypeConfiguration<T>)后,准备创建迁移。
如果实体使用 IIdGenerator 生成 ID,必须在实体配置中添加:
builder.Property(x => x.Id).ValueGeneratedNever();
常见错误:
Cannot insert explicit value for identity column in table 'Products'
when IDENTITY_INSERT is set to OFF
解决方案:添加 ValueGeneratedNever() 配置。
# 切换到 API 项目目录
cd Src/ApiServices/CodeSpirit.{Service}Api
# 创建 MySQL 迁移
dotnet ef migrations add {MigrationName} `
--context MySql{Service}DbContext `
--output-dir Data/Migrations/MySql
参数说明:
--context:必须使用 MySql{Service}DbContext--output-dir:指定迁移文件输出目录# 在同一项目目录下
dotnet ef migrations add {MigrationName} `
--context SqlServer{Service}DbContext `
--output-dir Data/Migrations/SqlServer
重要:迁移名称应保持一致,但文件会分别存储在 MySql/ 和 SqlServer/ 目录下。
检查迁移文件是否正确:
Data/Migrations/MySql/ 目录Data/Migrations/SqlServer/ 目录datetime(6))ValueGeneratedNever()(如适用)# 应用 MySQL 迁移
dotnet ef database update --context MySql{Service}DbContext
# 应用 SQL Server 迁移
dotnet ef database update --context SqlServer{Service}DbContext
| 场景 | 命名示例 |
|---|---|
| 初始创建 | InitialCreate |
| 添加实体 | Add{EntityName} |
| 添加字段 | Add{FieldName}To{EntityName} |
| 修改字段 | Update{FieldName}In{EntityName} |
| 删除字段 | Remove{FieldName}From{EntityName} |
| 添加索引 | AddIndexTo{EntityName} |
通过 DatabaseSpecificConfigurations.ApplyMySqlConfigurations() 自动处理:
datetime(6)(微秒精度)GETUTCDATE() → CURRENT_TIMESTAMP(6)varchar(n) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_citexttinyint(1)通过 DatabaseSpecificConfigurations.ApplySqlServerConfigurations() 处理:
错误信息:
No design-time factory found for 'ExamDbContext'
原因:使用了基础 DbContext 而非数据库特定的 DbContext。
解决方案:使用 MySqlExamDbContext 或 SqlServerExamDbContext。
错误信息:
Cannot insert explicit value for identity column
解决方案:在实体配置中添加 ValueGeneratedNever():
builder.Property(x => x.Id).ValueGeneratedNever();
问题:迁移文件没有按数据库类型分离存储。
解决方案:使用 --output-dir 参数明确指定目录:
--output-dir Data/Migrations/MySql
--output-dir Data/Migrations/SqlServer
检查迁移是否使用了正确的 DbContext:
# 使用方式
.\Scripts\validate-migration.ps1 -MigrationFile "Data/Migrations/MySql/20260123_AddProduct.cs"
一键应用 MySQL 和 SQL Server 迁移:
# 使用方式
.\Scripts\apply-migrations.ps1 -ServiceName "ExamApi"
详见 scripts/ 目录。
创建迁移前:
MySql{Service}DbContext / SqlServer{Service}DbContext)Data/Migrations/MySql / Data/Migrations/SqlServer)创建迁移后:
# 1. 创建 Product 实体和配置
# 2. 为 MySQL 创建迁移
dotnet ef migrations add AddProduct `
--context MySqlMallDbContext `
--output-dir Data/Migrations/MySql
# 3. 为 SQL Server 创建迁移
dotnet ef migrations add AddProduct `
--context SqlServerMallDbContext `
--output-dir Data/Migrations/SqlServer
# 4. 应用迁移
dotnet ef database update --context MySqlMallDbContext
dotnet ef database update --context SqlServerMallDbContext
# 1. 在 Product 实体中添加 Price 字段
# 2. 创建迁移
dotnet ef migrations add AddPriceToProduct `
--context MySqlMallDbContext `
--output-dir Data/Migrations/MySql
dotnet ef migrations add AddPriceToProduct `
--context SqlServerMallDbContext `
--output-dir Data/Migrations/SqlServer