Informazioni di riferimento sugli strumenti di Entity Framework Core - Console di Gestione pacchetti in Visual Studio
Gli strumenti Gestione pacchetti Console (PMC) 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 vengono eseguiti all'interno di Visual Studio usando la console di Gestione pacchetti. Questi strumenti funzionano sia con i progetti .NET Framework che con i progetti .NET Core.
Se non si usa Visual Studio, è consigliabile usare gli strumenti da riga di comando di EF Core. Gli strumenti dell'interfaccia della riga di comando di .NET Core sono multipiattaforma ed eseguiti all'interno di un prompt dei comandi.
Avviso
Questo articolo usa un database locale che non richiede l'autenticazione dell'utente. Le app di produzione devono usare il flusso di autenticazione più sicuro disponibile. Per altre informazioni sull'autenticazione per le app di test e produzione distribuite, vedere Proteggere i flussi di autenticazione.
Installa gli strumenti
Installare gli strumenti console di Gestione pacchetti eseguendo il comando seguente in Gestione pacchetti Console:
Install-Package Microsoft.EntityFrameworkCore.Tools
Aggiornare gli strumenti eseguendo il comando seguente in Gestione pacchetti Console.
Update-Package Microsoft.EntityFrameworkCore.Tools
Verificare l'installazione
Verificare che gli strumenti siano installati eseguendo questo comando:
Get-Help about_EntityFrameworkCore
L'output è simile al seguente (non indica quale versione degli strumenti in uso):
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
TOPIC
about_EntityFrameworkCore
SHORT DESCRIPTION
Provides information about the Entity Framework Core Package Manager Console Tools.
<A list of available commands follows, omitted here.>
Usare gli strumenti
Prima di usare gli strumenti:
- Comprendere la differenza tra il progetto di destinazione e quello di avvio.
- Informazioni su come usare gli strumenti con le librerie di classi .NET Standard.
- Per ASP.NET progetti Core, impostare l'ambiente.
Progetto di destinazione e 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 predefinito selezionato in Gestione pacchetti Console è il progetto di destinazione. È possibile specificare un progetto diverso come progetto di destinazione usando il
parametro .-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 di avvio in Esplora soluzioni è il progetto di avvio. È possibile specificare un progetto diverso come progetto di avvio usando il
parametro .-StartupProject
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 della console di Gestione pacchetti funzionano con i progetti .NET Core o .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 o .NET Framework 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 .NET Core o .NET Framework. 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.
Update-Database -Args '--environment Production'
Parametri comuni
La tabella seguente illustra i parametri comuni a tutti i comandi di EF Core:
Parametro | Descrizione |
---|---|
-Context <String> |
Classe DbContext da usare. Nome della classe solo o completo con spazi dei nomi. Se questo parametro viene omesso, EF Core trova la classe di contesto. Se sono presenti più classi di contesto, questo parametro è obbligatorio. |
-Project <String> |
Progetto di destinazione. Se questo parametro viene omesso, il progetto predefinito per Gestione pacchetti Console viene usato come progetto di destinazione. |
-StartupProject <String> |
Progetto di avvio. Se questo parametro viene omesso, il progetto di avvio nelle proprietà della soluzione viene usato come progetto di destinazione. |
-Args <String> |
Argomenti passati all'applicazione. |
-Verbose |
Visualizzare l'output dettagliato. |
Per visualizzare informazioni della Guida su un comando, usare il comando di Get-Help
PowerShell.
Suggerimento
I parametri , Project
e StartupProject
supportano l'espansione Context
tramite tabulazioni.
Add-Migration
Aggiunge una nuova migrazione.
Parametri:
Parametro | Descrizione |
---|---|
-Name <String> |
Nome della migrazione. Si tratta di un parametro posizionale ed è obbligatorio. |
-OutputDir <String> |
Directory utilizzata per restituire i file. I percorsi sono relativi alla directory del progetto di destinazione. Il valore predefinito è "Migrazioni". |
-Namespace <String> |
Spazio dei nomi da usare per le classi generate. L'impostazione predefinita viene generata dalla directory di output. |
I parametri comuni sono elencati in precedenza.
Migrazione bundle
Crea un eseguibile per aggiornare il database.
Parametri:
Parametro | Descrizione |
---|---|
-Output <String> |
Percorso del file eseguibile da creare. |
-Force |
Sovrascrivere i file esistenti. |
-SelfContained |
Aggregare anche il runtime .NET in modo che non sia necessario installarlo nel computer. |
-TargetRuntime <String> |
Runtime di destinazione per cui eseguire il bundle. |
-Framework <String> |
Framework di destinazione. Il valore predefinito è il primo nel progetto. |
I parametri comuni sono elencati in precedenza.
Drop-Database
Elimina il database.
Parametri:
Parametro | Descrizione |
---|---|
-WhatIf |
Visualizzare il database che verrà eliminato, ma non eliminarlo. |
I parametri comuni sono elencati in precedenza.
Get-DbContext
Elenca e ottiene informazioni sui tipi disponibili DbContext
.
I parametri comuni sono elencati in precedenza.
Get-Migration
Elenca le migrazioni disponibili.
Parametri:
Parametro | Descrizione |
---|---|
-Connection <String> |
Stringa di connessione al database. Il valore predefinito è quello specificato in AddDbContext o OnConfiguring. |
-NoConnect |
Non connettersi al database. |
I parametri comuni sono elencati in precedenza.
Optimize-DbContext
Genera una versione compilata del modello utilizzato da DbContext
.
Per altre informazioni, vedere Modelli compilati .
Parametri:
Parametro | Descrizione |
---|---|
-OutputDir <String> |
Directory in cui inserire i file. I percorsi sono relativi alla directory del progetto. |
-Namespace <String> |
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 . |
I parametri comuni sono elencati in precedenza.
Nota
Gli strumenti PMC attualmente non supportano la generazione di codice necessario per la compilazione NativeAOT e le query precompilate.
L'esempio seguente usa le impostazioni predefinite e funziona se ne esiste una DbContext
sola nel progetto:
Optimize-DbContext
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:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Remove-Migration
Rimuove l'ultima migrazione (esegue il rollback delle modifiche al codice eseguite per la migrazione).
Parametri:
Parametro | Descrizione |
---|---|
-Force |
Ripristinare la migrazione (eseguire il rollback delle modifiche applicate al database). |
I parametri comuni sono elencati in precedenza.
Scaffold-DbContext
Genera codice per i DbContext
tipi di entità e per un database. Per Scaffold-DbContext
generare un tipo di entità, la tabella di database deve avere una chiave primaria.
Parametri:
Parametro | Descrizione |
---|---|
-Connection <String> |
Stringa di connessione al database. Il valore può essere name=<name di stringa di connessione>. In tal caso il nome proviene dalle origini di configurazione configurate per il progetto. Si tratta di un parametro posizionale ed è obbligatorio. |
-Provider <String> |
Provider da usare. In genere si tratta del nome del pacchetto NuGet, ad esempio: Microsoft.EntityFrameworkCore.SqlServer . Si tratta di un parametro posizionale ed è obbligatorio. |
-OutputDir <String> |
Directory in cui inserire i file di classe di entità. I percorsi sono relativi alla directory del progetto. |
-ContextDir <String> |
Directory in cui inserire il DbContext file. I percorsi sono relativi alla directory del progetto. |
-Namespace <String> |
Spazio dei nomi da usare per tutte le classi generate. Il valore predefinito è generato dallo spazio dei nomi radice e dalla directory di output. |
-ContextNamespace <String> |
Spazio dei nomi da usare per la classe generata DbContext . Nota: esegue l'override di -Namespace . |
-Context <String> |
Nome della DbContext classe da generare. |
-Schemas <String[]> |
Schemi di tabelle e viste per cui generare tipi di entità. Se questo parametro viene omesso, 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. |
-Tables <String[]> |
Tabelle e viste per cui generare tipi di entità. È possibile includere tabelle o viste in uno schema specifico usando il formato 'schema.table' o 'schema.view'. Se questo parametro viene omesso, vengono incluse tutte le tabelle e le viste. |
-DataAnnotations |
Usare gli attributi per configurare il modello (laddove possibile). Se questo parametro viene omesso, viene usata solo l'API Fluent. |
-UseDatabaseNames |
Usare nomi di tabella, vista, sequenza e colonna esattamente come vengono visualizzati nel database. Se questo parametro viene omesso, i nomi dei database vengono modificati in modo da essere più conformi alle convenzioni di stile del nome C#. |
-Force |
Sovrascrivere i file esistenti. |
-NoOnConfiguring |
Non generare DbContext.OnConfiguring . |
-NoPluralize |
Non usare il pluralizzatore. |
I parametri comuni sono elencati in precedenza.
Esempio:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Esempio che esegue lo scaffolding solo delle tabelle selezionate e crea il contesto in una cartella separata con un nome e uno spazio dei nomi specificati:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Tables "Blog","Post" -ContextDir Context -Context BlogContext -ContextNamespace New.Namespace
Nell'esempio seguente viene letto il stringa di connessione usando Configuration.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Genera uno script SQL da DbContext. Ignora le migrazioni.
Parametri:
Parametro | Descrizione |
---|---|
-Output <String> |
File in cui scrivere il risultato. |
I parametri comuni sono elencati in precedenza.
Migrazione tramite script
Genera uno script SQL che applica tutte le modifiche da una migrazione selezionata a un'altra migrazione selezionata.
Parametri:
Parametro | Descrizione |
---|---|
-From <String> |
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 <String> |
Migrazione finale. Il valore predefinito è l'ultima migrazione. |
-Idempotent |
Generare uno script che può essere usato in un database in qualsiasi migrazione. |
-NoTransactions |
Non generare istruzioni di transazione SQL. |
-Output <String> |
File in cui scrivere il risultato. Se questo parametro viene omesso, il file viene creato con un nome generato nella stessa cartella dei file di runtime dell'app, ad esempio: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
I parametri comuni sono elencati in precedenza.
Suggerimento
I parametri , From
e Output
supportano l'espansione To
tramite tabulazioni.
Nell'esempio seguente viene creato uno script per la migrazione InitialCreate (da un database senza migrazioni), usando il nome della migrazione.
Script-Migration 0 InitialCreate
Nell'esempio seguente viene creato uno script per tutte le migrazioni dopo la migrazione InitialCreate usando l'ID migrazione.
Script-Migration 20180904195021_InitialCreate
Update-Database
Aggiorna il database all'ultima migrazione o a una migrazione specificata.
Parametro | Descrizione |
---|---|
-Migration <String> |
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. |
-Connection <String> |
Stringa di connessione al database. Il valore predefinito è quello specificato in AddDbContext o OnConfiguring . |
I parametri comuni sono elencati in precedenza.
Suggerimento
Il Migration
parametro supporta l'espansione tramite tabulazioni.
Nell'esempio seguente vengono ripristinate tutte le migrazioni.
Update-Database 0
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:
Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string