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

EF Core 6迁移历史表为空且Update-Database执行报错求助

解决EF Core 6 Code-First迁移历史表为空+AspNetRoles重复创建错误

问题分析

升级EF Core从6.0.16到6.0.21后,新增实体生成迁移并执行Update-Database时,EF Core错误尝试重复创建AspNetRoles等Identity表,导致报错;同时__EFMigrationsHistory始终为空,所有迁移状态显示为Pending。

解决方案

1. 彻底清理迁移并重新生成基础迁移

  • 删除项目中Migrations文件夹下的所有文件(含子文件)
  • 手动删除目标数据库(可通过SSMS执行drop database [数据库名]命令)
  • 生成初始迁移:
    # 使用.NET CLI
    dotnet ef migrations add InitialCreate
    # 或Package Manager Console
    Add-Migration InitialCreate
    
  • 执行数据库更新:
    dotnet ef database update
    # 或Package Manager Console
    Update-Database
    

2. 检查ApplicationDbContext配置

确保DbContext正确继承IdentityDbContext,示例代码:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    // 自定义实体DbSet
    public DbSet<MyTableName> MyTableNames { get; set; }
}

3. 验证Program.cs服务注册

确认DbContext与Identity服务注册逻辑正确:

var builder = WebApplication.CreateBuilder(args);

// 注册DbContext
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

// 注册Identity服务
builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();

4. 检查迁移文件内容

打开新生成的InitialCreate迁移文件,查看Up()方法:

  • 若发现包含CreateTable("AspNetRoles", ...)、CreateTable("AspNetUsers", ...)等Identity表的创建代码,手动删除这些重复语句,仅保留自定义实体的迁移逻辑,再执行Update-Database。

5. 对齐EF Core工具与NuGet版本

确保本地EF Core CLI工具版本与项目NuGet包版本一致(均为6.0.21):

  • 查看当前工具版本:
    dotnet ef --version
    
  • 安装对应版本工具:
    dotnet tool install --global dotnet-ef --version 6.0.21
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:23:30