次の方法で共有


Entity Framework Core MSBuild の統合

EF 9 以降では、MSBuild タスクを使用して、プロジェクトのビルド時または発行時に、コンパイル済みモデルとプリコンパイル済みクエリを自動的に生成できます。 これは主に NativeAOT 発行で使用することを目的としています。

警告

NativeAOT のサポートと MSBuild の統合は試験的な機能であり、運用環境での使用にはまだ適していません。

タスクのインストール

作業を開始するには、Microsoft.EntityFrameworkCore.Tasks NuGet パッケージをインストールします。 次に例を示します。

dotnet add package Microsoft.EntityFrameworkCore.Tasks

Note

生成されたファイルでコンパイルする必要があるすべての プロジェクトは NuGet パッケージを参照する必要があります。既定では推移的ではありません。

タスクの使用

プロジェクトで <PublishAot>true</PublishAot> が指定されている場合、既定では、MSBuild タスクは発行時にコンパイル済みモデルとプリコンパイル済みクエリを生成します。 それ以外の場合は、次のプロパティを設定して生成動作を制御できます。

MSBuild のプロパティ 説明
EFOptimizeContext MSBuild 統合を有効にするには、 true に設定します。
EFScaffoldModelStage コンパイル済みモデルが生成されるステージを示す publishbuild 、または none に設定します。 既定値は publish です。
EFPrecompileQueriesStage プリコンパイル済みクエリが生成されるステージを示す publishbuild 、または none に設定します。 既定値は publish です。
DbContextName 使用する派生 DbContext クラス。 クラス名のみ、または名前空間で完全修飾された名前。 このオプションを省略すると、EF Core はプロジェクト内のすべてのコンテキスト クラスに対して生成を実行します。
EFTargetNamespace 生成されるすべてのクラスに使用する名前空間。 このオプションを省略すると、EF Core は $(RootNamespace)を使用します。
EFOutputDir 生成されたファイルをプロジェクトのコンパイル前に配置するフォルダー。 このオプションを省略すると、EF Core は $(IntermediateOutputPath)を使用します。
EFNullable 生成されたコードで null 許容参照型を使用するかどうかを指定します。 このオプションを省略すると、EF Core は $(Nullable)を使用します。

制限事項

  • 逆ビルド依存関係が発生する可能性があるため、この方法を使用する場合は、別のスタートアップ プロジェクトを指定できません。 つまり、コンテキスト プロジェクトは構成の観点から自動的に行う必要があるため、通常、アプリが別のプロジェクトでホスト ビルダーを使用してコンテキストを構成する場合は、コンテキスト プロジェクトで IDesignTimeDbContextFactory<TContext>する必要があります。
  • コンパイル済みモデルが生成される前にプロジェクトをコンパイル可能にする必要があるため、このアプローチでは、コンパイル済みモデルのカスタマイズのための部分的なメソッド実装はサポートされません。
  • 現時点では、NativeAOT に必要な追加のコードがコンパイル済みモデルで常に生成されます。 NativeAOT を有効にする予定がない場合は、CLI ツールを使用してコンパイル済みモデルを 生成します

その他のリソース