.NET 6 Preview 7执行EF Core迁移提示未配置DbContext数据库提供者
问题根因
- EF Core相关包版本跨大版本不兼容:Jupyter.Core.Data项目使用了6.0 Preview7版本的EF Core,但Jupyter.Core.Api项目依赖的
Microsoft.EntityFrameworkCore.Tools、Npgsql.EntityFrameworkCore.PostgreSQL都是5.x版本,跨大版本的工具和数据库提供者无法匹配.NET 6预览版的EF Core逻辑。 - StationContext保留了无参构造函数:EF迁移工具会优先调用无参构造函数初始化DbContext,该场景下不会加载Program.cs中配置的数据库提供者,触发配置缺失报错。
解决方案
- 统一所有EF Core相关依赖的版本
将Jupyter.Core.Api项目下的Microsoft.EntityFrameworkCore.Tools、Npgsql.EntityFrameworkCore.PostgreSQL全部升级为和数据层匹配的6.0.0-preview.7.21378.4对应版本,优先建议直接将所有EF Core相关依赖升级到.NET 6正式版,避免预览版遗留bug。 - 移除DbContext的无参构造函数
删除StationContext.cs中的无参构造代码public StationContext() { },强制迁移工具调用带DbContextOptions参数的构造函数,加载服务中配置的数据库提供者。
如果有场景必须保留无参构造,可在OnConfiguring方法中增加配置兜底逻辑:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { if (!optionsBuilder.IsConfigured) { optionsBuilder.UseNpgsql("你的StationConnection连接字符串"); } base.OnConfiguring(optionsBuilder); }
- 执行迁移时显式指定项目参数
包管理器控制台执行命令补充项目参数,避免默认配置读取错误:add-migration 'User' -Context StationContext -StartupProject Jupyter.Core.Api -Project Jupyter.Core.Data - 确认连接字符串配置
检查Jupyter.Core.Api项目的appsettings.json中已正确配置StationConnection节点:
{ "ConnectionStrings": { "StationConnection": "Host=你的数据库地址;Database=库名;Username=账号;Password=密码" } }
内容的提问来源于stack exchange,提问作者Trevus Simon
相关产品推荐
相关产品推荐

