EF 9 以降では、MSBuild タスクを使用して、プロジェクトのビルド時または発行時に、コンパイル済みモデルとプリコンパイル済みクエリを自動的に生成できます。 これは主に NativeAOT 発行で使用することを目的としています。
警告
NativeAOT のサポートと MSBuild の統合は試験的な機能であり、運用環境での使用にはまだ適していません。
タスクのインストール
開始するには、Microsoft.EntityFrameworkCore.Tasks NuGet パッケージをインストールします。 次に例を示します。
dotnet add package Microsoft.EntityFrameworkCore.Tasks
注意
生成されたファイルでコンパイルする必要があるすべての プロジェクトは NuGet パッケージを参照する必要があります。既定では推移的ではありません。
タスクの使用
プロジェクトで <PublishAot>true</PublishAot> が指定されている場合、既定では、MSBuild タスクは発行時にコンパイル済みモデルとプリコンパイル済みクエリを生成します。 それ以外の場合は、次のプロパティを設定して生成動作を制御できます。
| MSBuild のプロパティ | 説明 |
|---|---|
| EFOptimizeContext | MSBuild 統合を有効にするには、 true に設定します。
EF Core 9-10 のみ。EF Core 11 で削除されました。 |
| EFScaffoldModelStage | コンパイル済みモデルが生成されるステージを示す publish、 build 、または none に設定します。 既定値は publish です。 |
| EFPrecompileQueriesStage | プリコンパイル済みクエリが生成されるステージを示す publish、 build 、または none に設定します。 既定値は publish です。 |
| DbContextName | 使用する派生 DbContext クラス。 クラス名のみ、または名前空間で完全修飾された名前。 このオプションを省略すると、EF Core はプロジェクト内のすべてのコンテキスト クラスに対して生成を実行します。 |
| EFTargetNamespace | 生成されるすべてのクラスに使用する名前空間。 このオプションを省略すると、EF Core は $(RootNamespace)を使用します。 |
| EFOutputDir | 生成されたファイルをプロジェクトのコンパイル前に配置するフォルダー。 このオプションを省略すると、EF Core は $(IntermediateOutputPath)を使用します。 |
| EFNullable | 生成されたコードで null 許容参照型を使用するかどうかを指定します。 このオプションを省略すると、EF Core は $(Nullable)を使用します。 |
注意
EF Core 11 以降では、 EFOptimizeContext プロパティは 削除されました。
EFScaffoldModelStageプロパティとEFPrecompileQueriesStage プロパティは個別に動作するようになりました。追加の有効化フラグは必要ありません。
制限事項
-
publishステージで統合を使用する場合は、スタートアップ プロジェクトで rid も設定します (例: <RuntimeIdentifier>win-x64</RuntimeIdentifier>) - 逆ビルド依存関係が発生する可能性があるため、この方法を使用する場合は、別のスタートアップ プロジェクトを指定できません。 つまり、コンテキスト プロジェクトは構成の観点から自動的に行う必要があるため、通常、アプリが別のプロジェクトでホスト ビルダーを使用してコンテキストを構成する場合は、コンテキスト プロジェクトで IDesignTimeDbContextFactory<TContext> をする必要があります。
- コンパイル済みモデルが生成される前にプロジェクトをコンパイル可能にする必要があるため、このアプローチでは、コンパイル済みモデルのカスタマイズのための部分的なメソッド実装はサポートされません。
- 現時点では、NativeAOT に必要な追加のコードがコンパイル済みモデルで常に生成されます。 NativeAOT を有効にする予定がない場合は、CLI ツールを使用してコンパイル済みモデルを 生成します。
その他のリソース
.NET