接続文字列を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
}
まず、
"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");
DefaultConnection
はjson構造の内部オブジェクトであり、Data
オブジェクトの子です。
したがって、設定ファイルを正確にしたい場合は、使用できます
var connStr = Configuration.GetSection("Data")
.GetSection("DefaultConnection")["ConnectionString"];
Configuration.GetConnectionString("name")
を使用しているとき、appsettings.jsonのConnectionString
プロパティ名の後に文字 's'がありませんでした
コピーしたい場合
"ConnectionStrings ": {
"SpyStore": "Server=(localdb)\\mssqllocaldb;Database=SpyStore;Trusted_Connection=True;MultipleActiveResultSets=true;"
}
メソッドの文言GetConnectionString
は私を混乱させました。私はそれの上にカーソルを置き、ConnectionStringの代わりにConnectionStrings
プロパティ名を探していた
これは私に現れたメッセージでした
値をnullにすることはできません。パラメーター名:connectionString
これらの行の起動時に変更された修正
services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration["Data:BookStoreContext:ConnectionString"]));
に
services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("BookStoreContext")));
同様のエラーが発生しました。ファイルのプロパティが[出力ディレクトリにコピー]-> [コピーしない]であったため、「appsettings.json」ファイルがロードされませんでした。常にコピーして保存して再構築するように設定しました。
appsetting.json
toを変更する必要があります:
{
"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");