web-dev-qa-db-ja.com

値をnullにすることはできません。パラメーター名:スターターのconnectionString appsettings.json

接続文字列をappsettings.jsonファイルに書き込んでスタートアップファイルに取り込もうとしていますが、Valueをnullにすることはできません。パラメーター名:connectionString。さまざまな例を使用してきましたが、ASP.NET 1.0 Coreスタートアップクラスでこの新しいセットアップが表示されないようです。

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
}
11
epv

まず、

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

Visual Studioで「Asp.NET構成ファイル」を追加するときに取得する構造とは少し異なります。あなたがそれをするとき、あなたは得る

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

「App」JavaScriptオブジェクトなし。そのため、拡張メソッドが機能しません。この構造を想定しています。とにかくこの構造(「App」を持つ構造)を使用して、次のような接続文字列を取得できます。

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

「。」の代わりに「:」を使用してJavaScriptオブジェクトツリーをナビゲートしていることに注意してください。これは、「。」の使用に関するクロスプラットフォームの問題の一部です。

「アプリ」を編集する場合:{}これを行うことができます:

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

これで、拡張メソッドが機能します。カバーの下には、上記のコードと同じものがあります。

var config2 = Configuration.GetConnectionString("DefaultConnection");
15
GlennSills

DefaultConnectionはjson構造の内部オブジェクトであり、Dataオブジェクトの子です。

したがって、設定ファイルを正確にしたい場合は、使用できます

var connStr = Configuration.GetSection("Data")
                           .GetSection("DefaultConnection")["ConnectionString"];
1
Rudis

Configuration.GetConnectionString("name")を使用しているとき、appsettings.jsonのConnectionStringプロパティ名の後に文字 's'がありませんでした

enter image description here

コピーしたい場合

"ConnectionStrings ": {
  "SpyStore": "Server=(localdb)\\mssqllocaldb;Database=SpyStore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}

メソッドの文言GetConnectionStringは私を混乱させました。私はそれの上にカーソルを置き、ConnectionStringの代わりにConnectionStringsプロパティ名を探していた

0
StefanJM

これは私に現れたメッセージでした

値をnullにすることはできません。パラメーター名:connectionString

これらの行の起動時に変更された修正

services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration["Data:BookStoreContext:ConnectionString"]));

services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("BookStoreContext")));
0
Douglas Loaiza

同様のエラーが発生しました。ファイルのプロパティが[出力ディレクトリにコピー]-> [コピーしない]であったため、「appsettings.json」ファイルがロードされませんでした。常にコピーして保存して再構築するように設定しました。

appsetting.jsontoを変更する必要があります:

    {
  "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");
0
M. Wiśnicki