EF Core 7:将连接字符串移出DbContext类时遇配置错误
解决EF Core中“No database provider has been configured for this DbContext”错误
你的问题核心出在服务注册的DbContext类型不匹配,同时无参构造函数存在可能导致手动实例化时的配置缺失,以下是具体解决步骤:
1. 修正Program.cs中的服务注册类型
你当前注册的是MyAppContext,但实际使用的DbContext类是ParaisoContext,这会导致DI容器无法正确提供配置好的实例,修改代码如下:
builder.Services.AddDbContext<ParaisoContext>(options => { options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")); });
2. 移除无参构造函数(推荐)
DbContext中的无参构造函数会允许你手动new ParaisoContext(),但这种方式不会加载你在Program.cs中配置的数据库选项,直接删除这个构造函数,强制通过依赖注入获取实例:
// 删除这段无参构造函数代码 // public ParaisoContext() // { // }
如果确实需要保留无参构造,建议在内部补充配置逻辑(不推荐,会回到硬编码连接字符串的问题),或者确保所有使用DbContext的地方都通过DI注入。
3. 验证连接字符串格式
确认appsettings.json中的DefaultConnection格式符合SQL Server要求,示例格式:
"ConnectionStrings": { "DefaultConnection": "Server=你的服务器地址;Database=数据库名称;Trusted_Connection=True;TrustServerCertificate=True;" }
4. 确保通过依赖注入获取DbContext
在控制器或服务中,必须通过构造函数注入ParaisoContext,禁止手动实例化:
public class RentalService { private readonly ParaisoContext _dbContext; public RentalService(ParaisoContext dbContext) { _dbContext = dbContext; } // 业务逻辑示例 public List<Rentals> GetAllRentals() { return _dbContext.Rentals.ToList(); } }
内容的提问来源于stack exchange,提问作者byteman
相关产品推荐
相关产品推荐

