ASP.NET Core 7数据库提供程序错误解决:仅用appsettings连接字符串
问题原因
你的DB类保留了无参构造函数,当项目中某些地方通过无参方式创建DB实例(比如手动new DB()),或者依赖注入过程中意外触发无参构造时,由于你注释了OnConfiguring方法,此时没有任何数据库提供程序的配置,就会抛出"未为此DbContext配置数据库提供程序"的错误。
保留OnConfiguring时,即使调用无参构造,该方法会直接硬编码配置数据库,所以能正常运行,但这就导致了连接字符串重复配置的问题。
解决方案
1. 删除DbContext的无参构造函数
只保留带DbContextOptions<DB>参数的构造函数,确保依赖注入能正确传入配置好的选项:
public class DB : IdentityDbContext { // 移除无参构造函数 public DB(DbContextOptions<DB> options) : base(options) { } // 彻底注释或删除OnConfiguring方法 // protected override void OnConfiguring(DbContextOptionsBuilder OptionsBuilder) // { // OptionsBuilder.UseSqlServer(@"data source=DESKTOP-JU6B74d\SQL2019;initial catalog = Laser; integrated security = true;TrustServerCertificate=True;"); // base.OnConfiguring(OptionsBuilder); // } }
2. 确保所有DbContext的使用都通过依赖注入
项目中任何需要使用DB的地方,都要通过构造函数注入的方式获取实例,禁止手动new DB():
比如控制器中注入:
public class HomeController : Controller { private readonly DB _db; // 构造函数注入DbContext public HomeController(DB db) { _db = db; } // 业务方法中使用_db }
3. 确认Program.cs的配置正确
你的现有配置已经正确读取appsettings.json的连接字符串,保持即可:
builder.Services.AddControllersWithViews(); builder.Services.AddDbContext<DB>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("CON1")));
这样配置后,DbContext会完全从appsettings.json读取连接字符串,不会再出现重复配置或未配置的错误。
内容的提问来源于stack exchange,提问作者sadegh
相关产品推荐
相关产品推荐

