.NET 6 における接続文字列の設定
問題点
.NET 6 では、ASP.NET Core アプリケーションの構造が簡素化され、従来の Startup
クラスと Program
クラスが統合されました。この変更により、以前のバージョンで使用していた以下のような接続文字列の設定方法が利用できなくなりました:
services.AddDbContext<DEMOWTSSPortalContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
特に、AddDbContext
メソッドが認識されないという問題が発生します。
ソリューション
.NET 6 では、WebApplicationBuilder
クラスが導入され、設定の取得とサービスの登録が統一された方法で行えるようになりました。
基本設定方法
var builder = WebApplication.CreateBuilder(args);
// 接続文字列の取得
string connString = builder.Configuration.GetConnectionString("DefaultConnection");
// DbContext の登録
builder.Services.AddDbContext<YourContext>(options =>
{
options.UseSqlServer(connString);
});
{
"ConnectionStrings": {
"DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;User Id=YourUserId;Password=YourPassword;"
}
}
必要な NuGet パッケージ
DbContext を使用するには、以下のパッケージをインストールする必要があります:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
(オプション:マイグレーション用)
DbContext クラスの設定
DbContext クラスには、適切なコンストラクタを実装する必要があります:
public class YourContext : DbContext
{
public YourContext(DbContextOptions<YourContext> options) : base(options)
{
}
// DbSet プロパティの定義
public DbSet<YourEntity> YourEntities { get; set; }
}
応用設定方法
設定ファイルから直接読み取る方法
コントローラーやサービス内で直接接続文字列を取得する必要がある場合:
public class YourService
{
private readonly string _connectionString;
public YourService(IConfiguration configuration)
{
_connectionString = configuration.GetConnectionString("DefaultConnection");
}
}
カスタム設定方法
より複雑な設定が必要な場合:
var objBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfiguration configuration = objBuilder.Build();
var connectionString = configuration.GetConnectionString("DefaultConnection");
注意点
- この方法は通常
Program.cs
内でのみ使用し、コントローラー内では依存性注入を通じてIConfiguration
を受け取ることを推奨します SetBasePath
は正しいアプリケーションのベースパスを指定してください
ベストプラクティス
- セキュリティ: 接続文字列には機密情報が含まれるため、開発環境と本番環境で異なる設定を使用しましょう
- 環境別設定:
appsettings.Development.json
とappsettings.Production.json
を活用しましょう - シークレット管理: 開発時にはユーザーシークレットを使用することを推奨します
まとめ
.NET 6 では、WebApplicationBuilder
を通じて設定とサービスの登録を行う新しいパターンが導入されました。この変更により、コードがより簡潔で直感的になりました。適切な NuGet パッケージをインストールし、上記の方法で接続文字列を設定することで、SQL Server データベースへの接続を簡単に実現できます。