Integrace Entity Framework Core s nástrojem 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čeno především k použití při publikování pomocí NativeAOT.

Varování

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í Microsoft. EntityFrameworkCore.Tasks balíček NuGet. 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 k povolení integrace nástroje MSBuild. Pouze EF Core 9-10; odebráno v EF Core 11.
EFScaffoldModelStage Nastavte na publish, build nebo none aby se určilo, ve které fázi bude zkompilovaný model vygenerován. Výchozí hodnota je publish.
EFPrecompileQueriesStage Nastavte na publish, build nebo none určete, ve které fázi se budou generovat předkompilované dotazy. Výchozí hodnota je publish.
DbContextName Odvozená DbContext třída, která se má použít. Název třídy pouze nebo plně kvalifikovaný pomocí názvových prostorů. 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, zda budou ve vygenerovaném kódu použity referenční typy, které mohou mít hodnotu null. Pokud tuto možnost vynecháte, ef Core použije $(Nullable).

Poznámka:

Od EF Core 11 EFOptimizeContext se tato vlastnost odebrala. EFScaffoldModelStage Vlastnosti EFPrecompileQueriesStage teď fungují nezávisle a nevyžadují další příznak povolení.

Omezení

  • Při použití integrace během fáze publish také nastavte rid ve spouštěcím projektu (např. <RuntimeIdentifier>win-x64</RuntimeIdentifier>)
  • 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 soběstačný, takže pokud vaše aplikace obvykle konfiguruje kontext pomocí tvůrce hostitelů v jiném projektu, musíte v kontextovém 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