Integrazione di Entity Framework Core MSBuild
A partire da EF 9, è possibile usare un'attività MSBuild per generare automaticamente il modello compilato e le query precompilate quando il progetto viene compilato o quando viene pubblicato. Questa operazione è destinata principalmente all'uso con la pubblicazione NativeAOT.
Avviso
Il supporto nativeAOT e l'integrazione di MSBuild sono funzionalità sperimentali e non sono ancora adatte per l'uso in produzione.
Installazione delle attività
Per iniziare, installare il pacchetto NuGet Microsoft.EntityFrameworkCore.Tasks . Ad esempio:
dotnet add package Microsoft.EntityFrameworkCore.Tasks
Nota
Ogni progetto che deve essere compilato con file generati deve fare riferimento al pacchetto NuGet, non è transitivo per impostazione predefinita.
Uso delle attività
Se il progetto specifica <PublishAot>true</PublishAot>
, per impostazione predefinita l'attività MSBuild genererà un modello compilato e query precompilate durante la pubblicazione. In caso contrario, è possibile impostare le proprietà seguenti per controllare il comportamento di generazione:
Proprietà MSBuild | Descrizione |
---|---|
EFOptimizeContext | Impostare su per true abilitare l'integrazione di MSBuild. |
EFScaffoldModelStage | Impostare su publish o build none per indicare in quale fase verrà generato il modello compilato. Il valore predefinito è publish . |
EFPrecompileQueriesStage | Impostare su publish build o none per indicare in quale fase verranno generate le query precompilate. Il valore predefinito è publish . |
DbContextName | Classe derivata DbContext da utilizzare. Nome della classe solo o completo con spazi dei nomi. Se questa opzione viene omessa, EF Core eseguirà la generazione per tutte le classi di contesto nel progetto. |
EFTargetNamespace | Spazio dei nomi da usare per tutte le classi generate. Se questa opzione viene omessa, EF Core userà $(RootNamespace) . |
EFOutputDir | Cartella in cui inserire i file generati prima della compilazione del progetto. Se questa opzione viene omessa, EF Core userà $(IntermediateOutputPath) . |
EFNullable | Indica se i tipi riferimento nullable verranno usati nel codice generato. Se questa opzione viene omessa, EF Core userà $(Nullable) . |
Limiti
- Non è possibile specificare un progetto di avvio diverso quando si usa questo approccio perché introduce una dipendenza di compilazione inversa. Ciò significa che il progetto di contesto deve essere responsabile automaticamente in termini di configurazione, quindi se l'app configura normalmente il contesto usando un generatore host in un progetto diverso, è necessario implementare IDesignTimeDbContextFactory<TContext> nel progetto di contesto.
- Poiché il progetto deve essere compilato prima che venga generato il modello compilato, questo approccio non supporta le implementazioni parziali del metodo per la personalizzazione del modello compilato.
- Attualmente, questo genererà sempre codice aggiuntivo nel modello compilato necessario per NativeAOT. Se non si prevede di abilitare NativeAOT, generare il modello compilato usando gli strumenti dell'interfaccia della riga di comando.