You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不重置数据库修改EF Core迁移历史表的架构?

迁移EF Core迁移历史表到自定义架构(保留现有数据与迁移记录)

操作步骤:

  1. 创建空迁移
    生成一个不包含实体模型变更的空迁移,专门用于处理历史表的架构迁移:

    Add-Migration MoveMigrationsHistoryToCustomSchema -Empty
    

    若使用.NET CLI:

    dotnet ef migrations add MoveMigrationsHistoryToCustomSchema --empty
    
  2. 修改迁移逻辑
    打开生成的迁移类,替换Up和Down方法的内容,实现表架构转移:

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        // 先创建目标自定义架构(如果不存在)
        migrationBuilder.Sql(@"IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = N'myCustomSchema')
                                BEGIN
                                    EXEC('CREATE SCHEMA [myCustomSchema]')
                                END");
    
        // 将dbo下的迁移历史表转移到自定义架构
        migrationBuilder.Sql(@"ALTER SCHEMA [myCustomSchema] TRANSFER [dbo].[__EFMigrationsHistory]");
    }
    
    protected override void Down(MigrationBuilder migrationBuilder)
    {
        // 回滚:将表移回dbo架构
        migrationBuilder.Sql(@"ALTER SCHEMA [dbo] TRANSFER [myCustomSchema].[__EFMigrationsHistory]");
    
        // 可选:若需删除自定义架构(仅当架构下无其他表时执行)
        // migrationBuilder.Sql(@"IF EXISTS (SELECT * FROM sys.schemas WHERE name = N'myCustomSchema')
        //                         BEGIN
        //                             EXEC('DROP SCHEMA [myCustomSchema]')
        //                         END");
    }
    
  3. 执行迁移
    运行命令完成迁移:

    Update-Database
    

    或.NET CLI:

    dotnet ef database update
    

关键说明:

  • 迁移完成后,EF Core会自动从myCustomSchema.__EFMigrationsHistory读取历史记录,不会重复执行已有的迁移。
  • 操作全程保留原有迁移数据,无需重置数据库。
  • 生产环境执行前请确保数据库用户拥有创建架构、转移表的权限,建议先备份数据库。

内容的提问来源于stack exchange,提问作者Emile Caron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 03:40:08