Azure Function v3使用EF Core报未配置DbContext数据库提供程序错误
排查与解决步骤
1. 修正Startup中配置读取方式
Azure Function v3的Startup中不能直接使用ConfigurationManager读取配置,需要通过IFunctionsHostBuilder上下文中的Configuration属性获取配置值,修改Startup代码如下:
[assembly: FunctionsStartup(typeof(Startup))] namespace Shizzle { class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { // 从宿主上下文获取配置 var config = builder.GetContext().Configuration; builder.Services.AddDbContext<CatsDBContext>( options => options.UseSqlServer(config.GetConnectionString("SqlConnectionString"))); } } }
如果编译提示找不到GetConnectionString方法,需要先安装NuGet包Microsoft.Extensions.Configuration。
2. 禁止手动实例化DbContext,统一使用依赖注入获取实例
你当前的CatsDBContext保留了无参构造函数,如果在Function代码中直接new CatsDBContext()就会触发无参构造,没有关联已配置的Options,自然会报错。
正确的用法是在Function类的构造函数中注入CatsDBContext实例:
public class Function1 { private readonly CatsDBContext _dbContext; // 构造函数注入 public Function1(CatsDBContext dbContext) { _dbContext = dbContext; } [FunctionName("Function1")] public async Task<IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req, ILogger log) { // 直接使用注入的_dbContext操作数据库即可 var cats = await _dbContext.Cats.ToListAsync(); return new OkObjectResult(cats); } }
如果不需要无参构造可以直接删除,避免误调用。
3. 确认local.settings.json的文件属性
右键点击项目中的local.settings.json文件,选择「属性」,确认「复制到输出目录」选项的值为如果较新则复制,确保运行时可以读取到配置内容。
4. 检查EF Core和Azure Function版本兼容性
确认你安装的Microsoft.EntityFrameworkCore.SqlServer版本和.NET Core 3.1(Azure Function v3对应运行时)兼容,建议使用3.1.x大版本的EF Core包,避免版本不兼容导致的配置不生效问题。
内容的提问来源于stack exchange,提问作者Jason_Hough
相关产品推荐
相关产品推荐

