You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:18:03