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

EF Core未创建MigrationsHistory表,如何解决及补全迁移历史?

EF Core __EFMigrationsHistory表缺失问题处理

一、表缺失的常见原因

  • 初始迁移创建时使用了--no-migrations-history参数,跳过了历史表生成逻辑
  • 手动移除了首个迁移文件中创建__EFMigrationsHistory表的代码片段
  • 配置了自定义迁移历史提供器,但未正确初始化表结构
  • 使用Database.EnsureCreated()初始化数据库,该方法不会生成或依赖迁移历史表

二、手动创建__EFMigrationsHistory表

根据数据库类型执行对应SQL:

SQL Server

CREATE TABLE [__EFMigrationsHistory] (
    [MigrationId] nvarchar(150) NOT NULL,
    [ProductVersion] nvarchar(32) NOT NULL,
    CONSTRAINT [PK___EFMigrationsHistory] PRIMARY KEY ([MigrationId])
);

MySQL/MariaDB

CREATE TABLE `__EFMigrationsHistory` (
    `MigrationId` varchar(150) NOT NULL,
    `ProductVersion` varchar(32) NOT NULL,
    PRIMARY KEY (`MigrationId`)
);

PostgreSQL

CREATE TABLE "__EFMigrationsHistory" (
    "MigrationId" character varying(150) NOT NULL,
    "ProductVersion" character varying(32) NOT NULL,
    CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId")
);

三、为已有的3个迁移填充历史记录

  1. 打开每个迁移文件,复制类顶部的MigrationId值(如20240501120000_InitialSetup)
  2. 确认项目引用的EF Core版本号(可查看NuGet包版本,如8.0.3)
  3. 执行插入语句,将每个迁移的信息写入历史表:
INSERT INTO __EFMigrationsHistory (MigrationId, ProductVersion)
VALUES 
('20240501120000_InitialSetup', '8.0.3'),
('20240502140000_AddCustomerTable', '8.0.3'),
('20240503160000_AddOrderTable', '8.0.3');

替换为你实际的MigrationId和EF Core版本

四、解决script-migration执行失败问题

先完成历史表的创建和已有迁移记录的填充,再重新运行script-migration,此时生成的脚本仅包含未应用的迁移逻辑。若需生成包含历史表创建的完整初始化脚本,可执行:

dotnet ef migrations script 0

该命令会生成从空数据库到最新迁移的全量脚本,包含__EFMigrationsHistory表的创建语句。

内容的提问来源于stack exchange,提问作者David Thielen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:36:06