移行は、DbContextを含むプロジェクトとは異なるプロジェクトに格納することをお勧めします。 これは、プロジェクトで WinUI、Xamarin、MAUI、Blazor、Azure Functions などのプラットフォーム固有のプロジェクトの種類を使用する場合、または特定のランタイム識別子 (RID) を対象とする場合に推奨されます。 また、この戦略を使用して、複数の移行セット (開発用に 1 つ、リリースからリリースへのアップグレード用など) を維持することもできます。
Tip
この記事の サンプルは、GitHub で確認できます。
Steps
新しいクラス ライブラリを作成します。
DbContext プロジェクトへの参照を追加します。
移行とモデル スナップショット ファイルをクラス ライブラリに移動します。
Tip
既存の移行がない場合は、DbContext を含むプロジェクトで移行を生成し、それを移動します。 移行プロジェクトに既存の移行が含まれていない場合、Add-Migration コマンドは DbContext を見つけることができないため、これは重要です。
移行アセンブリを構成します。
services.AddDbContext<ApplicationDbContext>( options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"), x => x.MigrationsAssembly("WebApplication1.Migrations")));スタートアップ プロジェクトから移行プロジェクトへの参照を追加します。
<ItemGroup> <ProjectReference Include="..\WebApplication1.Migrations\WebApplication1.Migrations.csproj" /> </ItemGroup>これにより循環依存関係が発生する場合は、代わりに 移行 プロジェクトの基本出力パスを更新できます。
<PropertyGroup> <BaseOutputPath>..\WebApplication1\bin\</BaseOutputPath> </PropertyGroup>
すべてを正しく行った場合は、新しい移行をプロジェクトに追加できます。
dotnet ef migrations add NewMigration --project WebApplication1.Migrations
Tip
アプリケーションで依存関係の挿入を使用する場合は、移行プロジェクトに IDesignTimeDbContextFactory<TContext> を実装することを検討してください。 これにより、EF ツールは、スタートアップ プロジェクトを実行しなくても、 DbContext を作成できます。 詳細については、「デザイン時ファクトリから」をご覧ください。
.NET