Freigeben über


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 publishFest 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.

Zusätzliche Ressourcen