Skip to content

.NET 6 における接続文字列の設定

問題点

.NET 6 では、ASP.NET Core アプリケーションの構造が簡素化され、従来の Startup クラスと Program クラスが統合されました。この変更により、以前のバージョンで使用していた以下のような接続文字列の設定方法が利用できなくなりました:

csharp
services.AddDbContext<DEMOWTSSPortalContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

特に、AddDbContext メソッドが認識されないという問題が発生します。

ソリューション

.NET 6 では、WebApplicationBuilder クラスが導入され、設定の取得とサービスの登録が統一された方法で行えるようになりました。

基本設定方法

csharp
var builder = WebApplication.CreateBuilder(args);

// 接続文字列の取得
string connString = builder.Configuration.GetConnectionString("DefaultConnection");

// DbContext の登録
builder.Services.AddDbContext<YourContext>(options =>
{
    options.UseSqlServer(connString);
});
json
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;User Id=YourUserId;Password=YourPassword;"
  }
}

必要な NuGet パッケージ

DbContext を使用するには、以下のパッケージをインストールする必要があります:

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Tools(オプション:マイグレーション用)

DbContext クラスの設定

DbContext クラスには、適切なコンストラクタを実装する必要があります:

csharp
public class YourContext : DbContext
{
    public YourContext(DbContextOptions<YourContext> options) : base(options)
    {
    }
    
    // DbSet プロパティの定義
    public DbSet<YourEntity> YourEntities { get; set; }
}

応用設定方法

設定ファイルから直接読み取る方法

コントローラーやサービス内で直接接続文字列を取得する必要がある場合:

csharp
public class YourService
{
    private readonly string _connectionString;
    
    public YourService(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("DefaultConnection");
    }
}

カスタム設定方法

より複雑な設定が必要な場合:

csharp
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 は正しいアプリケーションのベースパスを指定してください

ベストプラクティス

  1. セキュリティ: 接続文字列には機密情報が含まれるため、開発環境と本番環境で異なる設定を使用しましょう
  2. 環境別設定: appsettings.Development.jsonappsettings.Production.json を活用しましょう
  3. シークレット管理: 開発時にはユーザーシークレットを使用することを推奨します

まとめ

.NET 6 では、WebApplicationBuilder を通じて設定とサービスの登録を行う新しいパターンが導入されました。この変更により、コードがより簡潔で直感的になりました。適切な NuGet パッケージをインストールし、上記の方法で接続文字列を設定することで、SQL Server データベースへの接続を簡単に実現できます。