接続文字列
ほとんどのデータベース プロバイダーでは、データベースに接続するために接続文字列が必要です。 接続文字列:
- 保護する必要がある機密情報を含めることができます。
- アプリが開発、テスト、運用など、さまざまな環境に移行するときに変更が必要になる場合があります。
詳細については、「 安全な認証フロー」を参照してください。
ASP.NET Core
ASP.NET Core 構成では、さまざまなプロバイダーで接続文字列を格納できます。
appsettings.Development.json
またはappsettings.json
ファイル内。- 環境変数内
- Azure Key Vault の使用
- Secret Manager ツールの使用
警告
シークレットを構成ファイルに追加しないでください。
たとえば、 Secret Manager ツール はデータベース パスワードを格納できます。 シークレット マネージャーをスキャフォールディングして使用する場合、接続文字列はName=<database-alias>
で構成されます。
詳細については、ASP.NET Core ドキュメントの Configuration セクション を参照してください。
dotnet user-secrets init
dotnet user-secrets set ConnectionStrings:YourDatabaseAlias "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YourDatabase"
次に、スキャフォールディングで、Name=<database-alias>
で構成される接続文字列を使用します。
dotnet ef dbcontext scaffold Name=ConnectionStrings:YourDatabaseAlias Microsoft.EntityFrameworkCore.SqlServer
警告
この記事では、ユーザーの認証を必要としないローカル データベースを使用します。 運用アプリでは、使用可能な最も安全な認証フローを使用する必要があります。 デプロイされたテスト アプリと運用アプリの認証の詳細については、「セキュリティで保護された認証フロー」をご覧ください。
次の例は、appsettings.json
に格納されている接続文字列を示しています。
{
"ConnectionStrings": {
"BloggingDatabase": "Server=(localdb)\\mssqllocaldb;Database=EFGetStarted.ConsoleApp.NewDb;Trusted_Connection=True;"
},
}
通常、コンテキストは構成から読み取られる接続文字列を使用してProgram.cs
で構成されます。 GetConnectionString メソッドは、キーがConnectionStrings:<connection string name>
構成値を検索します。 GetConnectionString
には、 Microsoft.Extensions.Configuration 名前空間が必要です。
var conString = builder.Configuration.GetConnectionString("BloggingContext") ??
throw new InvalidOperationException("Connection string 'BloggingContext'" +
" not found.");
builder.Services.AddDbContext<BloggingContext>(options =>
options.UseSqlServer(conString));
WinForms および WPF アプリケーション
WinForms、WPF、ASP.NET 4 の各アプリケーションには、十分に実証された接続文字列パターンがあります。 接続文字列は、アプリケーションのApp.config
ファイルに追加するか、ASP.NET を使用するときにWeb.config
する必要があります。 ユーザー名やパスワードなどの機密情報を含む接続文字列は、 Protected Configuration を使用して構成ファイルの内容を保護する必要があります。
<?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");
}
}
.NET