Integratie van Entity Framework Core MSBuild
Vanaf EF 9 kunt u een MSBuild-taak gebruiken om het gecompileerde model en vooraf gecompileerde query's automatisch te genereren wanneer het project wordt gebouwd of wanneer het wordt gepubliceerd. Dit is voornamelijk bedoeld om te worden gebruikt met NativeAOT-publicatie.
Waarschuwing
NativeAOT-ondersteuning en de MSBuild-integratie zijn experimentele functies en zijn nog niet geschikt voor productiegebruik.
Het installeren van de taken
Installeer het Microsoft.EntityFrameworkCore.Tasks NuGet-pakket om aan de slag te gaan. Bijvoorbeeld:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Notitie
Elk project dat moet worden gecompileerd met gegenereerde bestanden moet naar het NuGet-pakket verwijzen, want het is niet standaard transitief.
Het gebruiken van de taken
Als het project <PublishAot>true</PublishAot>
opgeeft, genereert de MSBuild-taak standaard een gecompileerd model en vooraf gecompileerde query's tijdens het publiceren. Anders kunt u de volgende eigenschappen instellen om het gedrag van het genereren te beheren:
MSBuild-eigenschap | Beschrijving |
---|---|
EFOptimizeContext | Ingesteld op true om MSBuild-integratie in te schakelen. |
EFScaffoldModelStage | Ingesteld op publish , build of none om aan te geven in welke fase het gecompileerde model wordt gegenereerd. Standaard ingesteld op publish . |
EFPrecompileQueriesStage | Ingesteld op publish , build of none om aan te geven in welke fase de vooraf gecompileerde query's worden gegenereerd. Standaard ingesteld op publish . |
DbContextName | De afgeleide DbContext klasse die moet worden gebruikt. Alleen klassenaam of volledig gekwalificeerde naam met naamruimten. Als deze optie wordt weggelaten, voert EF Core generatie uit voor alle contextklassen in het project. |
EFTargetNamespace | De naamruimte die moet worden gebruikt voor alle gegenereerde klassen. Als deze optie wordt weggelaten, gebruikt EF Core $(RootNamespace) . |
EFOutputDir | De map voor het plaatsen van de gegenereerde bestanden voordat het project wordt gecompileerd. Als deze optie wordt weggelaten, gebruikt EF Core $(IntermediateOutputPath) . |
EFNullable | Of er null-verwijzingstypen zullen worden gebruikt in de gegenereerde code. Als deze optie wordt weggelaten, gebruikt EF Core $(Nullable) . |
Beperkingen
- Wanneer u tijdens de
publish
-fase de integratie gebruikt, stel dan ook de rid in het opstartproject in (bijvoorbeeld <RuntimeIdentifier>win-x64</RuntimeIdentifier>). - Een ander opstartproject kan niet worden opgegeven wanneer u deze benadering gebruikt, omdat dit een inverse build-afhankelijkheid zou veroorzaken. Dit betekent dat het contextproject zelfvoorzienend moet zijn in termen van configuratie. Dus als uw app de context normaal gesproken configureert met behulp van een host builder in een ander project, moet u implementeren IDesignTimeDbContextFactory<TContext> in het contextproject.
- Omdat het project moet worden samengesteld voordat het gecompileerde model wordt gegenereerd, biedt deze benadering geen ondersteuning voor gedeeltelijke methode-implementaties voor het aanpassen van het gecompileerde model.
- Op dit moment genereert dit altijd extra code in het gecompileerde model dat vereist is voor NativeAOT. Als u NativeAOT niet wilt inschakelen, het gecompileerde model genereren met behulp van de CLI-hulpprogramma's.