Integration von Entity Framework Core MSBuild

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

Verwendung 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 Setzen Sie auf true, um die MSBuild-Integration zu aktivieren. NUR EF Core 9-10; in EF Core 11 entfernt.
EFScaffoldModelStage Legen Sie publish, build oder none fest, um anzugeben, in welchem Stadium 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 $(RootNamespace) verwenden.
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 $(IntermediateOutputPath) verwenden.
EFNullable Gibt an, ob nullable Verweistypen im generierten Code verwendet werden. Wenn diese Option nicht angegeben wird, wird EF Core $(Nullable) verwenden.

Hinweis

Ab EF Core 11 wurde die EFOptimizeContext Eigenschaft entfernt. Die EFScaffoldModelStage Eigenschaften funktionieren jetzt unabhängig und EFPrecompileQueriesStage erfordern keine zusätzliche Aktivierungskennzeichnung.

Begrenzungen

  • Wenn Sie die Integration während der publish-Phase verwenden, legen Sie auch den RID im Startprojekt fest (z. B. <RuntimeIdentifier>win-x64</RuntimeIdentifier>).
  • 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 autark sein muss. Wenn Ihre App den Kontext also normalerweise mithilfe eines Host-Generators in einem anderen Projekt konfiguriert, dann 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