Informazioni di riferimento sugli strumenti di Entity Framework Core - Interfaccia della riga di comando di .NET Core

Gli strumenti dell'interfaccia della riga di comando per Entity Framework Core eseguono attività di sviluppo in fase di progettazione. Ad esempio, creano migrazioni, applicano migrazioni e generano codice per un modello basato su un database esistente. I comandi sono un'estensione del comando dotnet multipiattaforma, che fa parte di .NET Core SDK. Questi strumenti funzionano con i progetti .NET Core.

Quando si usa Visual Studio, è consigliabile usare gli strumenti della console Gestione pacchetti anziché gli strumenti dell'interfaccia della riga di comando. Gestione pacchetti Strumenti console:

  • Funziona con il progetto corrente selezionato nella console Gestione pacchetti senza che sia necessario cambiare manualmente le directory.
  • Apre i file generati da un comando dopo il completamento del comando.
  • Fornisce il completamento tramite tabulazione di comandi, parametri, nomi di progetto, tipi di contesto e nomi di migrazione.

Installazione degli strumenti

dotnet ef può essere installato come strumento globale o locale. La maggior parte degli sviluppatori preferisce l'installazione dotnet ef come strumento globale usando il comando seguente:

dotnet tool install --global dotnet-ef

Per usarlo come strumento locale, ripristinare le dipendenze di un progetto che lo dichiara come dipendenza degli strumenti usando un file manifesto dello strumento.

Aggiornare lo strumento usando il comando seguente:

dotnet tool update --global dotnet-ef

Prima di poter usare gli strumenti in un progetto specifico, è necessario aggiungerlo Microsoft.EntityFrameworkCore.Design .

dotnet add package Microsoft.EntityFrameworkCore.Design

Verifica l'installazione

Eseguire i comandi seguenti per verificare che gli strumenti dell'interfaccia della riga di comando di EF Core siano installati correttamente:

dotnet ef

L'output del comando identifica la versione degli strumenti in uso:


                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\

Entity Framework Core .NET Command-line Tools 2.1.3-rtm-32065

<Usage documentation follows, not shown.>

Aggiornare gli strumenti

Usare dotnet tool update --global dotnet-ef per aggiornare gli strumenti globali alla versione più recente disponibile. Se nel progetto sono installati gli strumenti in locale, usare dotnet tool update dotnet-ef. Installare una versione specifica aggiungendo --version <VERSION> al comando. Per altri dettagli, vedere la sezione Update (Aggiornamento ) della documentazione dello strumento dotnet.

Uso degli strumenti

Prima di usare gli strumenti, potrebbe essere necessario creare un progetto di avvio o impostare l'ambiente.

Progetto di destinazione e progetto di avvio

I comandi fanno riferimento a un progetto e a un progetto di avvio.

  • Il progetto è noto anche come progetto di destinazione perché è la posizione in cui i comandi aggiungono o rimuovono file. Per impostazione predefinita, il progetto nella directory corrente è il progetto di destinazione. È possibile specificare un progetto diverso come progetto di destinazione usando l'opzione --project .

  • Il progetto di avvio è quello che gli strumenti compilano ed eseguono. Gli strumenti devono eseguire il codice dell'applicazione in fase di progettazione per ottenere informazioni sul progetto, ad esempio il database stringa di connessione e la configurazione del modello. Per impostazione predefinita, il progetto nella directory corrente è il progetto di avvio. È possibile specificare un progetto diverso come progetto di avvio usando l'opzione --startup-project .

Il progetto di avvio e il progetto di destinazione sono spesso lo stesso progetto. Uno scenario tipico in cui sono progetti separati è quando:

  • Il contesto di EF Core e le classi di entità si trovano in una libreria di classi .NET Core.
  • Un'app console .NET Core o un'app Web fa riferimento alla libreria di classi.

È anche possibile inserire il codice delle migrazioni in una libreria di classi separata dal contesto di EF Core.

Altri framework di destinazione

Gli strumenti dell'interfaccia della riga di comando funzionano con progetti .NET Core e progetti .NET Framework. Le app con il modello EF Core in una libreria di classi .NET Standard potrebbero non avere un progetto .NET Core o .NET Framework. Ad esempio, questo vale per le app Xamarin e piattaforma UWP (Universal Windows Platform). In questi casi, è possibile creare un progetto di app console .NET Core il cui unico scopo è quello di fungere da progetto di avvio per gli strumenti. Il progetto può essere un progetto fittizio senza codice reale, ma è necessario solo fornire una destinazione per gli strumenti.

Perché è necessario un progetto fittizio? Come accennato in precedenza, gli strumenti devono eseguire il codice dell'applicazione in fase di progettazione. A tale scopo, è necessario usare il runtime di .NET Core. Quando il modello EF Core si trova in un progetto destinato a .NET Core o .NET Framework, gli strumenti di EF Core prendono in prestito il runtime dal progetto. Non possono farlo se il modello EF Core si trova in una libreria di classi .NET Standard. .NET Standard non è un'implementazione .NET effettiva; è una specifica di un set di API che le implementazioni di .NET devono supportare. Pertanto .NET Standard non è sufficiente per gli strumenti di EF Core per eseguire il codice dell'applicazione. Il progetto fittizio creato da usare come progetto di avvio fornisce una piattaforma di destinazione concreta in cui gli strumenti possono caricare la libreria di classi .NET Standard.

ambiente core ASP.NET

È possibile specificare l'ambiente per i progetti ASP.NET Core nella riga di comando. Questo e tutti gli argomenti aggiuntivi vengono passati a Program.CreateHostBuilder.

dotnet ef database update -- --environment Production

Suggerimento

Il -- token indirizza dotnet ef a trattare tutto ciò che segue come argomento e non cerca di analizzarli come opzioni. Eventuali argomenti aggiuntivi non usati da dotnet ef vengono inoltrati all'app.

Opzioni comuni

Opzione Short Descrizione
--json Visualizzare l'output JSON.
--context <DBCONTEXT> -c Classe DbContext da usare. Nome della classe solo o completo con spazi dei nomi. Se questa opzione viene omessa, EF Core troverà la classe di contesto. Se sono presenti più classi di contesto, questa opzione è obbligatoria.
--project <PROJECT> -p Percorso relativo alla cartella del progetto di destinazione. Il valore predefinito è la cartella corrente.
--startup-project <PROJECT> -s Percorso relativo alla cartella del progetto di avvio. Il valore predefinito è la cartella corrente.
--framework <FRAMEWORK> Moniker framework di destinazione per il framework di destinazione. Usare quando il file di progetto specifica più framework di destinazione e si vuole selezionare uno di essi.
--configuration <CONFIGURATION> Configurazione di compilazione, ad esempio: Debug o Release.
--runtime <IDENTIFIER> Identificatore del runtime di destinazione per il quale ripristinare i pacchetti. Per un elenco degli identificatori di runtime (RID, Runtime Identifier), vedere il catalogo RID.
--no-build Non compilare il progetto. Destinato a essere usato quando la compilazione è aggiornata.
--help -h Mostra informazioni della Guida.
--verbose -v Visualizzare l'output dettagliato.
--no-color Non colorare l'output.
--prefix-output Output del prefisso con livello.

Tutti gli argomenti aggiuntivi vengono passati all'applicazione.

dotnet ef database drop

Elimina il database.

Opzioni:

Opzione Short Descrizione
--force -f Non confermare.
--dry-run Visualizzare il database che verrà eliminato, ma non eliminarlo.

Le opzioni comuni sono elencate in precedenza.

dotnet ef database update

Aggiorna il database all'ultima migrazione o a una migrazione specificata.

Argomenti:

Argomento Descrizione
<MIGRATION> Migrazione di destinazione. Le migrazioni possono essere identificate in base al nome o all'ID. Il numero 0 è un caso speciale che indica prima della prima migrazione e fa sì che tutte le migrazioni vengano ripristinate. Se non viene specificata alcuna migrazione, per impostazione predefinita il comando corrisponde all'ultima migrazione.

Opzioni:

Opzione Descrizione
--connection <CONNECTION> Stringa di connessione al database. Il valore predefinito è quello specificato in AddDbContext o OnConfiguring.

Le opzioni comuni sono elencate in precedenza.

Negli esempi seguenti il database viene aggiornato a una migrazione specificata. Il primo usa il nome della migrazione e il secondo usa l'ID migrazione e una connessione specificata:

dotnet ef database update InitialCreate
dotnet ef database update 20180904195021_InitialCreate --connection your_connection_string

dotnet ef dbcontext info

Ottiene informazioni su un DbContext tipo.

Le opzioni comuni sono elencate in precedenza.

dotnet ef dbcontext list

Elenca i tipi disponibili DbContext .

Le opzioni comuni sono elencate in precedenza.

dotnet ef dbcontext optimize

Genera una versione compilata del modello usato dalle DbContext query e precompila.

Per altre informazioni, vedere Modelli compilati .

Opzioni:

Opzione Short Descrizione
--output-dir <PATH> -o Directory in cui inserire i file. I percorsi sono relativi alla directory del progetto.
--namespace <NAMESPACE> -n Spazio dei nomi da usare per tutte le classi generate. L'impostazione predefinita è generata dallo spazio dei nomi radice e dalla directory di output più CompiledModels.
--suffix <SUFFIX> Suffisso da allegare al nome di tutti i file generati. Ad esempio, .g può essere usato per indicare che questi file contengono codice generato
--no-scaffold Non generare un modello compilato. Viene usato quando il modello compilato è già stato generato.
--precompile-queries Generare query precompilate. Questa operazione è necessaria per la compilazione NativeAOT se il progetto di destinazione contiene query
--nativeaot Generare codice aggiuntivo nel modello compilato necessario per la compilazione NativeAOT e le query precompilate

Nota

Il supporto nativeAOT e le query precompilate sono considerati sperimentali in EF 9 e potrebbero cambiare notevolmente nella versione successiva.

Le opzioni comuni sono elencate in precedenza.

L'esempio seguente usa le impostazioni predefinite e funziona se ne esiste una DbContext sola nel progetto:

dotnet ef dbcontext optimize

L'esempio seguente ottimizza il modello per il contesto con il nome specificato e lo inserisce in una cartella e uno spazio dei nomi separati:

dotnet ef dbcontext optimize -o Models -n BlogModels -c BlogContext

dotnet ef dbcontext scaffold

Genera codice per i DbContext tipi di entità e per un database. Affinché questo comando generi un tipo di entità, la tabella di database deve avere una chiave primaria.

Argomenti:

Argomento Descrizione
<CONNECTION> Stringa di connessione al database. Per ASP.NET progetti Core 2.x, il valore può essere name=<name di stringa di connessione>. In tal caso il nome proviene dalle origini di configurazione configurate per il progetto.
<PROVIDER> Provider da usare. In genere si tratta del nome del pacchetto NuGet, ad esempio: Microsoft.EntityFrameworkCore.SqlServer.

Opzioni:

Opzione Short Descrizione
--data-annotations -d Usare gli attributi per configurare il modello (laddove possibile). Se questa opzione viene omessa, viene usata solo l'API Fluent.
--context <NAME> -c Nome della DbContext classe da generare.
--context-dir <PATH> Directory in cui inserire il file di DbContext classe. I percorsi sono relativi alla directory del progetto. Gli spazi dei nomi sono derivati dai nomi delle cartelle.
--context-namespace <NAMESPACE> Spazio dei nomi da usare per la classe generata DbContext . Nota: esegue l'override di --namespace.
--force -f Sovrascrivere i file esistenti.
--output-dir <PATH> -o Directory in cui inserire i file di classe di entità. I percorsi sono relativi alla directory del progetto.
--namespace <NAMESPACE> -n Spazio dei nomi da usare per tutte le classi generate. Il valore predefinito è generato dallo spazio dei nomi radice e dalla directory di output.
--schema <SCHEMA_NAME>... Schemi di tabelle e viste per cui generare tipi di entità. Per specificare più schemi, ripetere --schema per ognuno di essi. Se questa opzione viene omessa, vengono inclusi tutti gli schemi. Se si usa questa opzione, tutte le tabelle e le viste negli schemi verranno incluse nel modello, anche se non sono incluse in modo esplicito tramite --table.
--table <TABLE_NAME>... -t Tabelle e viste per cui generare tipi di entità. Per specificare più tabelle, ripetere -t o --table per ognuna di esse. È possibile includere tabelle o viste in uno schema specifico usando il formato 'schema.table' o 'schema.view'. Se questa opzione viene omessa, vengono incluse tutte le tabelle e le viste.
--use-database-names Usare nomi di tabella, vista, sequenza e colonna esattamente come vengono visualizzati nel database. Se questa opzione viene omessa, i nomi dei database vengono modificati in modo da essere più conformi alle convenzioni di stile dei nomi C#.
--no-onconfiguring Elimina la OnConfiguring generazione del metodo nella classe generata DbContext .
--no-pluralize Non usare il pluralizzatore.

Le opzioni comuni sono elencate in precedenza.

Nell'esempio seguente viene creato lo scaffolding di tutti gli schemi e le tabelle e i nuovi file vengono inseriti nella cartella Models .

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

L'esempio seguente esegue lo scaffolding solo delle tabelle selezionate e crea il contesto in una cartella separata con un nome e uno spazio dei nomi specificati:

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -t Blog -t Post --context-dir Context -c BlogContext --context-namespace New.Namespace

L'esempio seguente legge il stringa di connessione dal set di configurazione del progetto usando lo strumento Secret Manager.

dotnet user-secrets set ConnectionStrings:Blogging "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blogging"
dotnet ef dbcontext scaffold Name=ConnectionStrings:Blogging Microsoft.EntityFrameworkCore.SqlServer

Nell'esempio seguente viene ignorato lo scaffolding di un OnConfiguring metodo. Ciò può essere utile quando si vuole configurare DbContext all'esterno della classe . Ad esempio, ASP.NET app Core la configurano in genere in Startup.ConfigureServices.

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;User Id=myUsername;Password=myPassword;" Microsoft.EntityFrameworkCore.SqlServer --no-onconfiguring

dotnet ef dbcontext script

Genera uno script SQL da DbContext. Ignora le migrazioni.

Opzioni:

Opzione Short Descrizione
--output <FILE> -o File in cui scrivere il risultato.

Le opzioni comuni sono elencate in precedenza.

dotnet ef migrations add

Aggiunge una nuova migrazione.

Argomenti:

Argomento Descrizione
<NAME> Nome della migrazione.

Opzioni:

Opzione Short Descrizione
--output-dir <PATH> -o Directory utilizzata per restituire i file. I percorsi sono relativi alla directory del progetto di destinazione. Il valore predefinito è "Migrazioni".
--namespace <NAMESPACE> -n Spazio dei nomi da usare per le classi generate. L'impostazione predefinita viene generata dalla directory di output.

Le opzioni comuni sono elencate in precedenza.

dotnet ef migrations bundle

Crea un eseguibile per aggiornare il database.

Opzioni:

Opzione Short Descrizione
--output <FILE> -o Percorso del file eseguibile da creare.
--force -f Sovrascrivere i file esistenti.
--self-contained Aggregare anche il runtime .NET in modo che non sia necessario installarlo nel computer.
--target-runtime <RUNTIME_IDENTIFIER> -r Runtime di destinazione per cui eseguire il bundle.

Le opzioni comuni sono elencate in precedenza.

dotnet ef migrations has-pending-model-changes

Nota

Questo comando è stato aggiunto in EF Core 8.0.

Controlla se sono state apportate modifiche al modello dall'ultima migrazione.

Opzioni:

Le opzioni comuni sono elencate in precedenza.

dotnet ef migrations list

Elenca le migrazioni disponibili.

Opzioni:

Opzione Descrizione
--connection <CONNECTION> Stringa di connessione al database. Il valore predefinito è quello specificato in AddDbContext o OnConfiguring.
--no-connect Non connettersi al database.

Le opzioni comuni sono elencate in precedenza.

dotnet ef migrations remove

Rimuove l'ultima migrazione, rollback delle modifiche al codice eseguite per la migrazione più recente.

Opzioni:

Opzione Short Descrizione
--force -f Ripristinare la migrazione più recente, eseguendo il rollback delle modifiche di codice e database eseguite per la migrazione più recente. Continua a eseguire il rollback solo del codice se si verifica un errore durante la connessione al database.

Le opzioni comuni sono elencate in precedenza.

dotnet ef migrations script

Genera uno script SQL dalle migrazioni.

Argomenti:

Argomento Descrizione
<FROM> Migrazione iniziale. Le migrazioni possono essere identificate in base al nome o all'ID. Il numero 0 è un caso speciale che indica prima della prima migrazione. Il valore predefinito è 0.
<TO> Migrazione finale. Il valore predefinito è l'ultima migrazione.

Opzioni:

Opzione Short Descrizione
--output <FILE> -o File in cui scrivere lo script.
--idempotent -i Generare uno script che può essere usato in un database in qualsiasi migrazione.
--no-transactions Non generare istruzioni di transazione SQL.

Le opzioni comuni sono elencate in precedenza.

L'esempio seguente crea uno script per la migrazione InitialCreate:

dotnet ef migrations script 0 InitialCreate

Nell'esempio seguente viene creato uno script per tutte le migrazioni dopo la migrazione InitialCreate.

dotnet ef migrations script 20180904195021_InitialCreate

Risorse aggiuntive