В веб-приложении Asp.NET Core с EFCore-5 у меня есть следующие ConfigureServices
// ...
services.AddRouting(options => options.LowercaseUrls = true);
// get the connection string from secrets/env.variables
string connectionString = Configuration.GetConnectionString("MyWebApp"); /// <<< HERE
services.AddDbContext(connectionString);
services.AddDatabaseDeveloperPageExceptionFilter();
services.AddControllersWithViews();
// ...
а также AddDbContext
метод расширения:
public static void AddDbContext(this IServiceCollection services, string connectionString) =>
services.AddDbContext<ApplicationDbContext>(options =>
{
options.UseSqlServer(connectionString, /// <<< HERE
providerOptions =>
{
providerOptions
.EnableRetryOnFailure(
maxRetryCount: 5,
maxRetryDelay: TimeSpan.FromSeconds(30),
errorNumbersToAdd: null)
.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery);
});
options.EnableSensitiveDataLogging();
Если я помещаю строку подключения в appsettings.Production.json
, сайт работает хорошо, но как только я удаляю ее и добавляю EnvironmentVariables, страница выдает ошибку 500, и в журналах у меня есть:
System.ArgumentNullException: значение не может быть нулевым. (Параметр «connectionString») в Microsoft.EntityFrameworkCore.Utilities.Check.NotEmpty (строковое значение, строковое имя параметра) в Microsoft.EntityFrameworkCore.SqlServerDbContextOptionsExtensions.UseSqlServer (DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 sqlServerOptionsAction)
Ошибка указывает на строку, отмеченную в приведенном выше коде вторым HERE
.
Я устанавливаю переменные среды следующим образом:
Program.cs
при создании компоновщика хостов? Вы пытались закрыть VS и снова открыть после создания env var? Среда, вероятно, загружается только один раз и кэшируется. - person DavidG   schedule 02.06.2021