Значение не может быть нулевым. Имя параметра: connectionString appsettings.json в стартере
Я пытаюсь написать свою строку подключения в файле appsettings.json и внести ее в мой файл автозагрузки, но я продолжаю получать значение не может быть нулевым.
Имя параметра: connectionString. Я использую различные примеры, но, похоже, не вижу этой новой установки с классом запуска ASP.NET 1.0 Core.
Файл apps.txt:
{
"Data": {
"DefaultConnection": {
"ConnectionString": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
}
Метод, пытающийся
Startup.cs
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
var connStr = Configuration.GetConnectionString("DefaultConnection");
System.Console.WriteLine(connStr);
services.AddDbContext<DbContext>(options => options.UseSqlServer(connStr)); //error right here -- Null value
}
Ответы
Ответ 1
Прежде всего,
"Data": {
"ConnectionStrings": {
"DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},
}
Немного отличается от структуры, которую вы получаете, когда добавляете "Файл конфигурации Asp.NET" в Visual Studio. Когда вы делаете это, вы получаете
"ConnectionStrings": {
"DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"},
без JavaScript-объекта "Данные". Так вот почему метод расширения не работает. Ожидается эта структура. В любом случае вы можете использовать эту структуру (с данными) и получить строку подключения следующим образом:
var connectionString = Configuration["Data::ConnectionStrings:DefaultConnection"];
Обратите внимание, что вы перемещаетесь по дереву объектов JavaScript, используя :
вместо .
. Это связано с некоторыми кроссплатформенными проблемами при использовании .
.
Если вы редактируете "Данные": {} вы можете сделать это:
var connectionString = Configuration["ConnectionStrings:DefaultConnection"];
Теперь метод расширения будет работать. Под обложками это то же самое, что и код выше.
var config2 = Configuration.GetConnectionString("DefaultConnection");
Ответ 2
Мне не хватало буквы 'после имени свойства ConnectionString
в appsettings.json при использовании Configuration.GetConnectionString("name")
![enter image description here]()
Если вы хотите скопировать
"ConnectionStrings ": {
"SpyStore": "Server=(localdb)\\mssqllocaldb;Database=SpyStore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}
Метод с формулировкой GetConnectionString
смутил меня, я завис над ним и, о, держу, он искал имя свойства ConnectionStrings
вместо ConnectionString
Ответ 3
DefaultConnection
является внутренним объектом в структуре json и является дочерним объектом Data
.
Итак, если вы хотите быть точным с вашим конфигурационным файлом, вы можете использовать
var connStr = Configuration.GetSection("Data")
.GetSection("DefaultConnection")["ConnectionString"];
Ответ 4
Вам нужно изменить appsetting.json
на:
{
"Data": {
"ConnectionStrings": {
"DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}
}
И теперь будет работать:
var connStr = Configuration.GetConnectionString("DefaultConnection");
Ответ 5
это было сообщение, которое появилось мне
Значение не может быть нулевым. Имя параметра: connectionString
Я исправляю это при запуске этих строк
services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration["Data:BookStoreContext:ConnectionString"]));
к
services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("BookStoreContext")));
Ответ 6
Я получил похожую ошибку. Мой файл "appsettings.json" не загружался, потому что свойства файла были "Копировать в выходной каталог" → "Не копировать". Я установил, что копировать всегда сохранять и перестраивать. Это сработало.
Ответ 7
Я слишком долго боролся с пустой строкой соединения, но обнаружил, что делаю это:
builder.Services.AddDbContext<MlDataContext>(provider => new MlDataContext(config.GetConnectionString("ConnectionStrings:SqlConnectionString")));
Я использовал оба ConnectionStrings:
префикс И GetConnectionString
. Когда я удалил префикс, он работал:
builder.Services.AddDbContext<MlDataContext>(options => options.UseSqlServer(config.GetConnectionString("SqlConnectionString")));
Ответ 8
Я столкнулся с этой проблемой, используя asp.net core 3.0.
Обходное решение для меня:
Вместо:
var connectionString = Конфигурация [ "ConnectionStrings: DefaultConnection"];
Используйте это:
var connectionString = Конфигурация [ "ConnectionStrings :: DefaultConnection"];
Акцент здесь - двойное двоеточие в конфигурации соединения.