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.

Installazione degli 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.>

Uso degli 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 -Project parametro .

  • 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 -StartupProject parametro .

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 , Projecte StartupProject supportano l'espansione Contexttramite 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.

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. 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. 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 dalla configurazione del progetto eventualmente impostata usando lo strumento Secret Manager.

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 , Frome Output supportano l'espansione Totramite 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

Aggiornamenti 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

Risorse aggiuntive