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

