如何不重置数据库修改EF Core迁移历史表的架构?
迁移EF Core迁移历史表到自定义架构(保留现有数据与迁移记录)
操作步骤:
创建空迁移
生成一个不包含实体模型变更的空迁移,专门用于处理历史表的架构迁移:Add-Migration MoveMigrationsHistoryToCustomSchema -Empty若使用.NET CLI:
dotnet ef migrations add MoveMigrationsHistoryToCustomSchema --empty修改迁移逻辑
打开生成的迁移类,替换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"); }执行迁移
运行命令完成迁移:Update-Database或.NET CLI:
dotnet ef database update
关键说明:
- 迁移完成后,EF Core会自动从
myCustomSchema.__EFMigrationsHistory读取历史记录,不会重复执行已有的迁移。 - 操作全程保留原有迁移数据,无需重置数据库。
- 生产环境执行前请确保数据库用户拥有创建架构、转移表的权限,建议先备份数据库。
内容的提问来源于stack exchange,提问作者Emile Caron
相关产品推荐
相关产品推荐

