別の移行プロジェクトを使用する

移行を、DbContext を含むものとは別のプロジェクトに保存できます。 また、この方法を使用して複数の移行セット (たとえば、1 つを開発用、もう 1 つをリリース間のアップグレード用など) を維持することもできます。

ヒント

この記事のサンプルは GitHub で確認できます。

手順

  1. 新しいクラス ライブラリを作成します。

  2. DbContext プロジェクトへの参照を追加します。

  3. 移行およびモデルのスナップショット ファイルをクラス ライブラリに移動します。

    ヒント

    既存の移行がない場合は、DbContext を含むプロジェクト内で生成し、それを移動します。 これが重要なのは、移行プロジェクトに既存の移行が含まれていない場合、Add-Migration コマンドで DbContext を見つけることができないためです。

  4. 移行アセンブリを構成します。

    services.AddDbContext<ApplicationDbContext>(
        options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection"),
                x => x.MigrationsAssembly("WebApplication1.Migrations")));
    
  5. スタートアップ プロジェクトから移行プロジェクトへの参照を追加します。

    <ItemGroup>
      <ProjectReference Include="..\WebApplication1.Migrations\WebApplication1.Migrations.csproj" />
    </ItemGroup>
    

    これによって循環依存の関係が発生した場合は、代わりに移行プロジェクトの基本出力パスを更新できます。

    <PropertyGroup>
      <BaseOutputPath>..\WebApplication1\bin\</BaseOutputPath>
    </PropertyGroup>
    

すべてを正しく行ったら、新しい移行をプロジェクトに追加できます。

dotnet ef migrations add NewMigration --project WebApplication1.Migrations