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 con 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 Microsoft. EntityFrameworkCore.Tasks pacchetto NuGet. 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.

Utilizzo 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 true per abilitare l'integrazione di MSBuild. Solo EF Core 9-10; rimosso in EF Core 11.
EFScaffoldModelStage Impostare su publisho buildnone 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 di namespace. 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 di riferimento nullable verranno usati nel codice generato. Se questa opzione viene omessa, EF Core userà $(Nullable).

Nota

A partire da EF Core 11, la EFOptimizeContext proprietà è stata rimossa. Le EFScaffoldModelStage proprietà e EFPrecompileQueriesStage ora funzionano in modo indipendente e non richiedono un flag di abilitazione aggiuntivo.

Limiti

  • Quando si usa l'integrazione durante la fase di publish impostare anche il rid nel progetto di avvio , ad esempio <RuntimeIdentifier>win-x64</RuntimeIdentifier>)
  • 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 del contesto deve essere autosufficiente in termini di configurazione, quindi se l'app normalmente configura il contesto usando un host builder in un progetto diverso, dovresti implementare IDesignTimeDbContextFactory<TContext> nel progetto del 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 della riga di comando.

Risorse aggiuntive