2016-11-29 1 views
3

Я пытаюсь написать свою строку подключения в файле appsettings.json и вносить ее в мой файл автозагрузки, но я продолжаю получать значение не может быть нулевым. Имя параметра: connectionString. Я использую различные примеры, но, похоже, не вижу этой новой установки с классом запуска ASP.NET 1.0 Core.Значение не может быть пустым. Имя параметра: connectionString appsettings.json в стартере

Appsetting.json файл:

{ 
"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 
} 

ответ

5

Прежде всего,

"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. Поэтому метод расширения не работает. Он ожидает эту структуру. Вы можете использовать эту структуру (один с «App») в любом случае, и вы получите строку подключения следующим образом:

var connectionString = Configuration["App::ConnectionStrings:DefaultConnection"]; 

Обратите внимание, что вы навигационный через дерево объектов JavaScript, используя «:» «» вместо. Это касается некоторых межплатформенных проблем с использованием «.».

Если вы вычеркивать в "App": {} вы можете сделать это:

var connectionString = Configuration["ConnectionStrings:DefaultConnection"]; 

Теперь метод расширения будет работать. Под обложками это то же самое, что и код выше.

var config2 = Configuration.GetConnectionString("DefaultConnection"); 
0

Вы должны изменить ваш 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"); 
+1

ConnectionString не должен быть потомком данных, как 'GetConnectionString ('DefaultConnection') является сокращением для' Configuration [ "ConnectionString: DefaultConnection"] ' – Tseng

1

DefaultConnection является внутренним объектом в структуре json и является дочерним по отношению к объекту Data.

Так что, если вы хотите, чтобы быть точным с файлом конфигурации вы можете использовать

var connStr = Configuration.GetSection("Data") 
          .GetSection("DefaultConnection")["ConnectionString"]; 
+0

я все еще получаю ту же ошибку. – epv

+1

Материалы GetSection не требуются. Вы можете перемещаться по дереву объектов с помощью «:» в качестве разделителя. Таким образом, конфигурация [«Данные: DefaultConnection: ConnectionString»] эквивалентна. См. Мой ответ ниже. – GlennSills

Смежные вопросы