Sdílet prostřednictvím


Integrace Entity Framework Core MSBuild

Od EF 9 můžete pomocí úlohy MSBuild vygenerovat kompilovaný model a předkompilované dotazy automaticky buď při sestavení projektu, nebo při publikování. To je určené hlavně k použití s publikováním NativeAOT.

Upozorňující

Nativní podpora AOT a integrace nástroje MSBuild jsou experimentální funkce a ještě nejsou vhodné pro produkční použití.

Instalace úloh

Začněte instalací balíčku NuGet Microsoft.EntityFrameworkCore.Tasks . Příklad:

dotnet add package Microsoft.EntityFrameworkCore.Tasks

Poznámka:

Každý projekt, který je potřeba zkompilovat pomocí vygenerovaných souborů, by měl odkazovat na balíček NuGet, ve výchozím nastavení není tranzitivní.

Použití úkolů

Pokud projekt určí <PublishAot>true</PublishAot> , úloha MSBuild ve výchozím nastavení vygeneruje zkompilovaný model a předkompilované dotazy během publikování. V opačném případě můžete nastavit následující vlastnosti pro řízení chování generování:

Vlastnost MSBuild Popis
EFOptimizeContext Nastavte na true povolení integrace nástroje MSBuild.
EFScaffoldModelStage Nastavte na publishhodnotu none nebo build naznačte, ve které fázi se zkompilovaný model vygeneruje. Výchozí hodnota publishje .
EFPrecompileQueriesStage Nastavte na publishhodnotu none nebo build naznačte, ve které fázi se budou generovat předkompilované dotazy. Výchozí hodnota publishje .
DbContextName Odvozená DbContext třída, která se má použít. Pouze název třídy nebo plně kvalifikovaný s obory názvů. Pokud tuto možnost vynecháte, EF Core provede generování pro všechny třídy kontextu v projektu.
EFTargetNamespace Obor názvů, který se má použít pro všechny generované třídy. Pokud tuto možnost vynecháte, ef Core použije $(RootNamespace).
EFOutputDir Složka pro vložení vygenerovaných souborů před kompilací projektu. Pokud tuto možnost vynecháte, ef Core použije $(IntermediateOutputPath).
EFNullable Určuje, jestli se vygenerovaném kódu použijí odkazové typy s možnou hodnotou null. Pokud tuto možnost vynecháte, ef Core použije $(Nullable).

Omezení

  • Při použití tohoto přístupu nelze zadat jiný spouštěcí projekt, protože by zavedl inverzní závislost sestavení. To znamená, že kontextový projekt musí být z hlediska konfigurace automatický, takže pokud vaše aplikace obvykle konfiguruje kontext pomocí tvůrce hostitelů v jiném projektu, musíte v kontextu projektu implementovat IDesignTimeDbContextFactory<TContext>.
  • Vzhledem k tomu, že projekt musí být kompilovatelný před vygenerovaným kompilovaným modelem, tento přístup nepodporuje částečné implementace metod pro přizpůsobení zkompilovaného modelu.
  • V současné době se vždy vygeneruje další kód v zkompilovaném modelu, který se vyžaduje pro NativeAOT. Pokud neplánujete povolit NativeAOT, vygenerujte kompilovaný model pomocí nástrojů rozhraní příkazového řádku.

Další materiály