Итак, я использую следующий код для настройки моего DbContext в методе Configure FunctionsStartup:
var config = new ConfigurationBuilder()
.AddJsonFile("local.settings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
builder.Services.AddOptions();
builder.Services.AddSingleton(config);
builder.Services.Configure<MessageResenderOptions>(config);
builder.Services.PostConfigure<MessageResenderOptions>(opt =>
opt.ServiceBusConnectionString = config["ServiceBusConnectionString"]);
builder.Services.AddDbContext<BackOfficeFacadeDatabaseContext>(options =>
options.UseSqlServer(config.GetConnectionString("DatabaseConnectionString")));
builder.Services.AddScoped<IRepository, Repository.Repository>();
«DatabaseConnectionString» предоставляется в Azure Deployment и отображается в Azure Раздел конфигурации портала функции.
Но моя функция не может подключиться к базе данных. Всякий раз, когда я жестко запрограммировал ConnectionString, он работает нормально, но когда я пытаюсь получить его, как указано выше, он не подключается. Я проверил фактическое значение строки подключения в разделе конфигурации функции, и оно верное.
Я думаю, что это связано с проблемой синхронизации. В приведенном выше коде вы можете видеть, что ServiceBusConnectionString предоставляется в методе Services.PostConfigure, что не относится к DbContext. Итак, я решил, что мне нужно как-то внедрить DbContext способом «PostConfigure», но мне это не удалось.
Очень надеюсь, что кто-то может мне помочь.