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
相关产品推荐
相关产品推荐

