Entity Framework Core MSBuild-Integration
Ab EF 9 können Sie eine MSBuild-Aufgabe verwenden, um das kompilierte Modell und vorkompilierte Abfragen automatisch zu generieren, wenn das Projekt erstellt oder veröffentlicht wird. Dies ist hauptsächlich für nativeAOT-Veröffentlichung vorgesehen.
Warnung
NativeAOT-Unterstützung und die MSBuild-Integration sind experimentelle Features und sind noch nicht für die Produktionsverwendung geeignet.
Installieren der Aufgaben
Installieren Sie zunächst das Microsoft.EntityFrameworkCore.Tasks NuGet-Paket. Zum Beispiel:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Hinweis
Jedes Projekt, das mit generierten Dateien kompiliert werden muss, sollte auf das NuGet-Paket verweisen, es ist nicht standardmäßig transitiv.
Verwenden der Aufgaben
Wenn das Projekt angibt <PublishAot>true</PublishAot>
, generiert die MSBuild-Aufgabe standardmäßig ein kompiliertes Modell und vorkompilierte Abfragen während der Veröffentlichung. Andernfalls können Sie die folgenden Eigenschaften festlegen, um das Generierungsverhalten zu steuern:
MSBuild-Eigenschaft | Beschreibung |
---|---|
EFOptimizeContext | Legen Sie diese Einstellung fest, true um die MSBuild-Integration zu aktivieren. |
EFScaffoldModelStage | Legen Sie diesen publish Fest fest oder build none geben Sie an, in welcher Phase das kompilierte Modell generiert wird. Wird standardmäßig auf publish festgelegt. |
EFPrecompileQueriesStage | Festlegen auf publish , build oder none um anzugeben, in welcher Phase die vorkompilierten Abfragen generiert werden. Wird standardmäßig auf publish festgelegt. |
DbContextName | Die abgeleitete DbContext Klasse, die verwendet werden soll. Nur Klassenname oder vollqualifiziert mit Namespaces. Wenn diese Option nicht angegeben wird, führt EF Core die Generierung für alle Kontextklassen im Projekt durch. |
EFTargetNamespace | Der für alle generierten Klassen zu verwendende Namespace. Wenn diese Option nicht angegeben wird, wird EF Core verwendet $(RootNamespace) . |
EFOutputDir | Der Ordner, in dem die generierten Dateien abgelegt werden sollen, bevor das Projekt kompiliert wird. Wenn diese Option nicht angegeben wird, wird EF Core verwendet $(IntermediateOutputPath) . |
EFNullable | Gibt an, ob nullable Verweistypen im generierten Code verwendet werden. Wenn diese Option nicht angegeben wird, wird EF Core verwendet $(Nullable) . |
Begrenzungen
- Ein anderes Startprojekt kann nicht angegeben werden, wenn dieser Ansatz verwendet wird, da dadurch eine umgekehrte Buildabhängigkeit eingeführt wird. Dies bedeutet, dass das Kontextprojekt in Bezug auf die Konfiguration automatisch erfolgen muss. Wenn Ihre App den Kontext also normalerweise mithilfe eines Host-Generators in einem anderen Projekt konfiguriert, müssen Sie IDesignTimeDbContextFactory<TContext> im Kontextprojekt implementieren.
- Da das Projekt kompilierbar sein muss, bevor das kompilierte Modell generiert wird, unterstützt dieser Ansatz keine partiellen Methodenimplementierungen für die Anpassung des kompilierten Modells.
- Derzeit generiert dies immer zusätzlichen Code im kompilierten Modell, das für NativeAOT erforderlich ist. Wenn Sie nicht planen, NativeAOT zu aktivieren, generieren Sie das kompilierte Modell mit den CLI-Tools.