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

ASP.NET Core 6新Program.cs结构下Identity EF迁移初始化报错解决方案问询

解决方案
  • 第一步:移除重复的DbContext注册
    你当前Program.cs中存在两次ApplicationDbContext的服务注册,属于无效重复配置,先删除第一行的注册代码,仅保留Sqlite相关的注册:
// 删除这行
// builder.Services.AddDbContext<ApplicationDbContext>();
// 保留下面这行即可
builder.Services.AddEntityFrameworkSqlite().AddDbContext<ApplicationDbContext>();
  • 第二步:兼容EFCore设计时工具访问(二选一即可)
    方法1:无侵入修改Program.cs,仅需要在整个Program.cs文件的最末尾添加一行代码,无需改动原有顶层语句结构:

    // 原有Program.cs所有代码都保留,在最末尾加这一行即可
    public partial class Program { }
    

    原理是.NET 6+ 顶层语句默认生成的Program类为internal访问级别,EFCore设计时工具无法读取服务配置,加这行将Program类暴露为公共分部类即可解决。

    方法2:添加设计时DbContext工厂
    如果你不想改动Program.cs,可以直接在项目中新增DesignTimeDbContextFactory.cs文件,代码如下:

    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Design;
    using WebApplication1.Authentication;
    
    namespace WebApplication1
    {
        public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
        {
            public ApplicationDbContext CreateDbContext(string[] args)
            {
                var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
                optionsBuilder.UseSqlite(@"Data source=test.db");
                return new ApplicationDbContext(optionsBuilder.Options);
            }
        }
    }
    

    EFCore设计时工具会自动识别该工厂类,直接获取DbContext实例完成迁移生成。

完成上述操作后,重新在包管理器控制台执行add-migration Initial即可正常生成迁移文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:09:03