Значение не может быть нулевым. Имя параметра: 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"];

Акцент здесь - двойное двоеточие в конфигурации соединения.