.NET Minimal API执行EF Core迁移提示无法创建AppDbContext对象报错
问题根因
EF Core执行迁移时抛出*"Unable to create an Object of type 'AppDbContext'. For the different patterns supported at design time."*报错,核心原因是Program.cs的代码顺序错误:
你在调用var app = builder.Build();完成应用构建之后,才执行DbContext、仓储、AutoMapper的服务注册。EF Core设计时工具构建宿主时,只会加载Build()方法调用前注册到容器的服务,写在Build之后的服务注册不会生效,容器找不到AppDbContext的构造依赖,自然无法实例化对象。
另外你的代码里重复注册了ICommandRepo(一次Scoped生命周期、一次Transient生命周期),虽然不是本次报错的直接原因,但会导致依赖注入生命周期混乱,需要一并修正。
修复方案
- 调整
Program.cs代码顺序,将所有服务注册逻辑移动到builder.Build()调用之前,删除重复的服务注册,修正后参考代码如下:
var builder = WebApplication.CreateBuilder(args); // 所有服务注册必须放在Build调用前 builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var sqlconnectionBuilder = new SqlConnectionStringBuilder(); sqlconnectionBuilder.ConnectionString = builder.Configuration.GetConnectionString("SQLDbConnection"); sqlconnectionBuilder.UserID = builder.Configuration["UserId"]; sqlconnectionBuilder.Password = builder.Configuration["Password"]; builder.Services.AddDbContext<AppDbContext>(opt => opt.UseSqlServer(sqlconnectionBuilder.ConnectionString)); // 仅保留一份ICommandRepo注册,按需选择生命周期即可 builder.Services.AddScoped<ICommandRepo, CommandRepo>(); builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); // 服务注册完成后再构建应用 var app = builder.Build(); // 后续写中间件配置、端点映射等运行时代码即可 // 例如 app.UseSwagger(); app.UseSwaggerUI(); 以及Minimal API的路由定义
- 你当前的
AppDbContext.cs和project.csproj配置没有问题,不需要修改。 - 清理并重新构建项目后,重新执行迁移命令即可:
dotnet clean dotnet build dotnet ef migrations add InitialCreate dotnet ef database update
排查补充
如果调整顺序后依旧报错,检查解决方案的启动项目设置:EF Core设计时工具默认以启动项目为宿主加载服务配置,确保启动项目正确引用了EF Core Design、SqlServer等相关包,且配置文件里的数据库连接字段可以正常读取。
内容的提问来源于stack exchange,提问作者Thiyagarajan
相关产品推荐
相关产品推荐

