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

EF执行Update-Database时尝试重建已存在的__EFMigrationsHistory表问题

EF Core PostgreSQL 自定义Schema下迁移报错问题

操作流程与问题现象

  • 采用空数据库+Code-First模式,已定义好模型和DbContext

  • 执行初始迁移命令:

    Add-Migration InitialMigration -OutputDir MigrationsPostgres -Context DbContextDevelopmentPostgres
    

    生成包含所有表的初始迁移文件后,执行数据库更新:

    Update-Database -Context DbContextDevelopmentPostgres
    

    更新过程正常,所有表(包括存储在自定义Schema下的__EFMigrationsHistory)创建完成。

  • 为某模型新增属性后,生成新迁移:

    Add-Migration TestMigration -OutputDir MigrationsPostgres -Context DbContextDevelopmentPostgres
    

    成功生成仅包含模型变更的迁移文件。

  • 执行更新命令时(注:命令中Context名称存在拼写错误,应为DbContextDevelopmentPostgres):

    Update-Database -Context GeophysicsDbContextDevelopmentPostgres
    

    出现报错,输出内容如下:

    SELECT EXISTS (
        SELECT 1 FROM pg_catalog.pg_class c
        JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace
        WHERE n.nspname='public' AND
              c.relname='__EFMigrationsHistory'
    )
    SELECT EXISTS (
        SELECT 1 FROM pg_catalog.pg_class c
        JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace
        WHERE n.nspname='public' AND
              c.relname='__EFMigrationsHistory'
    )
    Failed executing DbCommand (10ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
    CREATE TABLE "__EFMigrationsHistory" (
        "MigrationId" character varying(150) NOT NULL,
        "ProductVersion" character varying(32) NOT NULL,
        CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId")
    );
    

    提示__EFMigrationsHistory表已存在,但实际该表存储在自定义Schema下,EF Core默认仅检查public Schema,因public下无此表,遂尝试创建导致冲突。

使用版本

  • Microsoft.EntityFrameworkCore 6.0.25
  • Microsoft.EntityFrameworkCore.Tools 6.0.25
  • Npgsql.EntityFrameworkCore.PostgreSQL 6.0.22

补充说明

曾在Oracle中使用相同方法(低版本EF Core),未出现此类问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:56:12