接続文字列

ほとんどのデータベース プロバイダーでは、データベースに接続するうえで、なんらかの形式の接続文字列が必要となります。 接続文字列は、保護されるべき機密情報を含んでいることがあります。 また、開発、テスト、運用など、異なる環境にアプリケーションを移したときは、接続文字列の変更が必要になることもあります。

ASP.NET Core

ASP.NET Core では、構成システムの柔軟性が非常に高く、appsettings.json や環境変数、ユーザーのシークレット ストア、その他の構成ソースに接続文字列を格納することができます。 詳細については、ASP.NET Core ドキュメントの構成に関するセクションを参照してください。

たとえば、シークレット マネージャー ツールを使用してデータベースのパスワードを格納しておき、スキャフォールディングでは、単に Name=<database-alias> から成る接続文字列を使用することができます。

dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer

または、接続文字列を appsettings.json に格納するには、次の例のようにします。

{
  "ConnectionStrings": {
    "BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
  },
}

そのうえでコンテキストは通常、Startup.cs 内で構成され、接続文字列は構成から読み取られます。 GetConnectionString() メソッドは、キーが ConnectionStrings:<connection string name> である構成値を探していることに注意してください。 この拡張メソッドを使用するには、Microsoft.Extensions.Configuration 名前空間をインポートする必要があります。

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
}

WinForms および WPF アプリケーション

WinForms、WPF、ASP.NET 4 の各アプリケーションには、十分に実証された接続文字列パターンがあります。 接続文字列は、アプリケーションの App.config ファイル (ASP.NET を使用している場合は Web.config) に追加する必要があります。 ユーザー名やパスワードなどの機密情報が接続文字列に含まれている場合は、保護構成を使用して構成ファイルの内容を保護できます。

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <connectionStrings>
    <add name="BloggingDatabase"
         connectionString="Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" />
  </connectionStrings>
</configuration>

ヒント

App.config に格納される EF Core の接続文字列の providerName 設定は必須ではありません。データベース プロバイダーは、コードを用いて構成されるためです。

その後、コンテキストの OnConfiguring メソッド内で ConfigurationManager API を使用して接続文字列を読み取ることができます。 この API を使用できるようにするには、System.Configuration フレームワーク アセンブリに参照を追加しなければならない場合があります。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
    }
}

ユニバーサル Windows プラットフォーム (UWP)

一般に、UWP アプリケーションの接続文字列は、ローカル ファイル名を指定するだけの SQLite 接続です。 通常、機密情報は含んでいないため、アプリケーションのデプロイ時に変更する必要はありません。 したがって、これらの接続文字列は、以下のようにコード中に残っていても通常は問題ありません。 コードから取り除きたい場合、その設定の概念が UWP でサポートされています。詳細については、UWP ドキュメントのアプリ設定に関するセクションを参照してください。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
            optionsBuilder.UseSqlite("Data Source=blogging.db");
    }
}