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 publish hodnotu none nebo build naznačte, ve které fázi se zkompilovaný model vygeneruje. Výchozí hodnota publish je . |
EFPrecompileQueriesStage | Nastavte na publish hodnotu none nebo build naznačte, ve které fázi se budou generovat předkompilované dotazy. Výchozí hodnota publish je . |
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.