2016-11-29 10 views
3

私のappsettings.jsonファイルに接続文字列を書き込んでスタートアップファイルに書き込もうとしていますが、値がnullのままになっています。 パラメータ名:connectionString。私はさまざまな例を使用していますが、ASP.NET 1.0のコアスタートアップクラスでこの新しい設定を見ることはできません。値はnullにはできません。パラメータ名:startString内のconnectionString appsettings.json

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

そして今、働くことになります:あなたがあなたのappsetting.jsonを変更する必要が 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"}, 
} 

を使用することができますあなたは "を追加するときに、あなたが得る構造とは若干異なっていますVisual Studioの「Asp.NET構成ファイル」を参照してください。あなたがそれを行うときには、「アプリケーション」のJavaScriptオブジェクトなし

"ConnectionStrings": { 
    "DefaultConnection": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true"}, 

を取得します。そのため、拡張メソッドが機能していないのです。それはこの構造を期待している。とにかく、この構造(「アプリケーション」との1)を使用し、そのようにあなたの接続文字列を取得することができます:あなたが使用してJavaScriptのオブジェクトツリーをナビゲートしている

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

はお知らせ「:」「」の代わりに。それは、 '。'を使用したいくつかのクロスプラットフォームの問題です。

あなたは「アプリケーション」アウト編集する場合:

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

今拡張メソッドが動作します:{}あなたがこれを行うことができます。カバーの下には上記のコードと同じものがあります。

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

を試みる

{ 
"Data": { 
"DefaultConnection": { 
    "ConnectionString": "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

'GetConnectionString( 'DefaultConnection'が)'コンフィギュレーション[ "のConnectionString:DefaultConnectionを"]の省略形であるとのConnectionStringは、データの子であってはなりません ' – Tseng

1

DefaultConnectionは、json構造の内側オブジェクトであり、Dataオブジェクトの子です。あなたが設定ファイルを正確にしたい場合は

だから、

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

、私はまだ同じエラーを取得します。 – epv

+1

GetSectionは必須ではありません。 ":"をデリミタとして使用してオブジェクトツリーを移動することができます。したがって、Configuration ["Data:DefaultConnection:ConnectionString"]は同等です。 – GlennSills

関連する問題