web-dev-qa-db-ja.com

appsettings.jsonからstartup.csへの接続文字列を使用する

現在、スタートアップでは、次のようなSQLサーバー文字列があります。

public void ConfigureServices(IServiceCollection services)
{
    var connection = @"Server=servername;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true";
    services.AddDbContext<CRAMSContext>(options => options.UseSqlServer(connection));
}

Appsettings.jsonの内容を使用するにはどうすればよいですか:

{
  "Data": {
    "DefaultConnection": {
    "ConnectionString": "Data Source=server;Initial Catalog=database;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

新しいASP.NET 1.0 COREの新しいセットアップで次のように表示するには、次のようにパラメーター化されます。

public void ConfigureServices(IServiceCollection services)
{
    var connection2 = new SqlConnection connectionString;
    services.AddDbContext<CRAMSContext>(options => options.UseSqlServer(connection2));
}

また、テスト用とqa用に異なるデータベースがある場合、ASP.NETアプリに各環境で接続を使用することを知らせるにはどうすればよいですか?

私のスタートアップクラスはすでにルートで次のように定義されています。

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();
}
13
epv

接続文字列に適切な構造を使用します。

{
  "ConnectionStrings": {
    "DefaultConnection": "xxx"
  }
}

Startup.csでのアクセス:

services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
13
sensei