Condividi tramite


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 publisho build none per indicare in quale fase verrà generato il modello compilato. Il valore predefinito è publish.
EFPrecompileQueriesStage Impostare su publishbuild 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.

Risorse aggiuntive