Referentiehandleiding voor Entity Framework Core-tools - Pakketbeheer-console in Visual Studio

De hulpprogramma's van de Pakketbeheer Console (PMC) voor Entity Framework Core voeren ontwikkelingstaken tijdens de ontwerpfase uit. Ze maken bijvoorbeeld migraties, passen migraties toe en genereren code voor een model op basis van een bestaande database. De opdrachten worden uitgevoerd in Visual Studio met behulp van de Pakketbeheer Console. Deze hulpprogramma's werken met zowel .NET Framework- als .NET-projecten.

Als u Visual Studio niet gebruikt, raden we u in plaats daarvan de EF Core-opdrachtregeltools aan. De .NET CLI-hulpprogramma's zijn platformoverschrijdend en worden uitgevoerd in een opdrachtprompt.

Warning

In dit artikel wordt een lokale database gebruikt waarvoor de gebruiker niet hoeft te worden geverifieerd. Productie-apps moeten gebruikmaken van de veiligste verificatiestroom die beschikbaar is. Zie Beveiligde verificatiestromenvoor meer informatie over verificatie voor geïmplementeerde test- en productie-apps.

De hulpprogramma's installeren

Installeer de Pakketbeheer Console-hulpprogramma's door de volgende opdracht uit te voeren in Pakketbeheer Console:

Install-Package Microsoft.EntityFrameworkCore.Tools

Werk de hulpprogramma's bij door de volgende opdracht uit te voeren in Pakketbeheer Console.

Update-Package Microsoft.EntityFrameworkCore.Tools

De installatie controleren

Controleer of de hulpprogramma's zijn geïnstalleerd door deze opdracht uit te voeren:

Get-Help about_EntityFrameworkCore

De uitvoer ziet er als volgt uit (er wordt niet opgegeven welke versie van de hulpprogramma's u gebruikt):


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

TOPIC
    about_EntityFrameworkCore

SHORT DESCRIPTION
    Provides information about the Entity Framework Core Package Manager Console Tools.

<A list of available commands follows, omitted here.>

De hulpprogramma's gebruiken

Voordat u de hulpprogramma's gebruikt:

  • Inzicht in het verschil tussen het doel- en opstartproject.
  • Meer informatie over het gebruik van de hulpprogramma's met .NET Standard-klassebibliotheken.
  • Stel de omgeving in voor ASP.NET Core-projecten.

Doel- en opstartproject

De opdrachten verwijzen naar een project en een opstartproject.

  • Het project wordt ook wel het doelproject genoemd, omdat het de plek is waar opdrachten bestanden toevoegen of verwijderen. Standaard is het standaardproject dat is geselecteerd in de Pakketbeheer Console het doelproject. U kunt een ander project opgeven als doelproject met behulp van de parameter -Project.

  • Het opstartproject is het project dat door de hulpprogramma's wordt gebouwd en uitgevoerd. De hulpprogramma's moeten toepassingscode uitvoeren tijdens het ontwerp om informatie over het project op te halen, zoals de databaseverbindingsreeks en de configuratie van het model. Het opstartproject in Solution Explorer- is standaard het opstartproject. U kunt een ander project opgeven als opstartproject met behulp van de parameter -StartupProject.

Het opstartproject en het doelproject zijn vaak hetzelfde project. Een typisch scenario waarin ze afzonderlijke projecten zijn, is wanneer:

  • De EF Core-context- en entiteitsklassen bevinden zich in een .NET-klassebibliotheek.
  • Een .NET-console-app of web-app verwijst naar de klassebibliotheek.

Het is ook mogelijk om migratiecode in een klassebibliotheek te gescheiden van de EF Core-context.

Andere doelraamwerken

De Pakketbeheer Console-hulpprogramma's moeten toepassingscode uitvoeren met behulp van een .NET runtime. Gebruik geen platformspecifieke toepassing, zoals .NET MAUI, WinUI, Blazor WebAssembly of Azure Functions, als opstartproject voor de hulpprogramma's. Plaats in plaats daarvan migraties in een normaal platformoverschrijdend .NET project met een IDesignTimeDbContextFactory<TContext>, en gebruik dat project als het doelproject en het opstartproject. Zie Het gebruik van een afzonderlijke Project voor migraties.

Important

Xamarin.Android, Xamarin.iOS, Xamarin.Mac zijn nu rechtstreeks geïntegreerd in .NET (te beginnen met .NET 6) als .NET voor Android, .NET voor iOS en .NET voor macOS. Als u vandaag met deze projecttypen bouwt, moeten ze worden bijgewerkt naar .NET SDK-projecten voor continue ondersteuning. Zie voor meer informatie over het upgraden van Xamarin-projecten naar .NET de Upgrade van Xamarin naar .NET & .NET MAUI documentatie.

Visual Studio en Pakketbeheer Console worden normaal gesproken uitgevoerd als 64-bits processen en kunnen geen x86-opstartassembly laden. Geef de voorkeur aan een AnyCPU-migratieproject. Wanneer alle ontwerptijdafhankelijkheden x86 moeten zijn, gebruikt u de .NET CLI met een expliciet geselecteerde x86 SDK/toolhost.

ASP.NET Core-omgeving

U kunt de omgeving opgeven voor ASP.NET Core-projecten op de commandoregel. Deze en eventuele aanvullende argumenten worden doorgegeven aan Program.CreateHostBuilder.

Update-Database -Args '--environment Production'

Algemene parameters

In de volgende tabel ziet u parameters die gebruikelijk zijn voor alle EF Core-opdrachten:

Parameter Description
-Context <String> De DbContext-klasse om te gebruiken. Alleen klassenaam of volledig gekwalificeerde naam met naamruimten. Als deze parameter wordt weggelaten, vindt EF Core de contextklasse. Als er meerdere contextklassen zijn, is deze parameter vereist.
-Project <String> Het doelproject. Als deze parameter wordt weggelaten, wordt het standaardproject voor Pakketbeheer Console- gebruikt als doelproject.
-StartupProject <String> Het opstartproject. Als deze parameter wordt weggelaten, wordt het opstartproject in Solution-eigenschappen als doelproject gebruikt.
-Args <String> Argumenten die zijn doorgegeven aan de toepassing.
-Verbose Uitgebreide uitvoer weergeven.

Als u help-informatie over een opdracht wilt weergeven, gebruikt u de opdracht Get-Help van PowerShell.

Tip

De parameters Context, Projecten StartupProject ondersteunen tabuitbreiding.

Add-Migration

Hiermee voegt u een nieuwe migratie toe.

Parameters:

Parameter Description
-Name <String> De naam van de migratie. Dit is een positionele parameter en is vereist.
-OutputDir <String> De map die moet worden gebruikt voor de uitvoerbestanden. Paden zijn relatief ten opzichte van de doelmap van het project. Standaard ingesteld op 'Migraties'.
-Namespace <String> De naamruimte die moet worden gebruikt voor de gegenereerde klassen. Standaardwaarden die worden gegenereerd op basis van de uitvoermap.
-NoBuild Bouw het project niet voordat u de opdracht uitvoert. Bedoeld om te worden gebruikt wanneer de build up-to-date is. Toegevoegd in EF Core 11.

De algemene parameters worden hierboven vermeld.

Bundle-Migration

Hiermee maakt u een uitvoerbaar bestand om de database bij te werken.

Parameters:

Parameter Description
-Output <String> Het pad naar het uitvoerbare bestand dat moet worden gemaakt.
-Force Bestaande bestanden overschrijven.
-SelfContained Bundel ook de .NET-runtime zodat deze niet hoeft te worden geïnstalleerd op de computer.
-TargetRuntime <String> De doelruntime waarvoor moet worden gebundeld.
-Framework <String> Het doelframework. Wordt standaard ingesteld op het eerste item in het project.

De algemene parameters worden hierboven vermeld.

Drop-Database

Hiermee wordt de database verwijderd.

Parameters:

Parameter Description
-WhatIf Geef weer welke database gedropt zou worden, maar drop deze niet.
-Connection <String> De verbindingsreeks voor de database. Standaard ingesteld op de waarde die is opgegeven in AddDbContext of OnConfiguring. Toegevoegd in EF Core 11.

De algemene parameters worden hierboven vermeld.

Get-DbContext

Geeft en haalt informatie op over beschikbare DbContext types.

De algemene parameters worden hierboven vermeld.

Get-Migration

Hier vindt u een lijst met beschikbare migraties.

Parameters:

Parameter Description
-Connection <String> De verbindingsreeks voor de database. Wordt standaard ingesteld op de waarde die is gespecificeerd in AddDbContext of OnConfiguring.
-NoConnect Maak geen verbinding met de database.

De algemene parameters worden hierboven vermeld.

Optimize-DbContext

Genereert een gecompileerde versie van het model dat wordt gebruikt door de DbContext.

Zie Gecompileerde modellen voor meer informatie.

Parameters:

Parameter Description
-OutputDir <String> De map waarin bestanden moeten worden geplaatst. Paden zijn relatief ten opzichte van de projectmap.
-Namespace <String> De naamruimte die moet worden gebruikt voor alle gegenereerde klassen. Standaard gegenereerd op basis van de hoofdnaamruimte en de uitvoermap plus CompiledModels.

De algemene parameters worden hierboven vermeld.

Note

De PMC-hulpprogramma's bieden momenteel geen ondersteuning voor het genereren van code die vereist is voor nativeAOT-compilatie en vooraf gecompileerde query's.

In het volgende voorbeeld worden de standaardinstellingen gebruikt en wordt gebruikt als er slechts één DbContext in het project is:

Optimize-DbContext

In het volgende voorbeeld wordt het model geoptimaliseerd voor de context met de opgegeven naam en wordt het in een afzonderlijke map en naamruimte geplaatst:

Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext

Remove-Migration

Hiermee verwijdert u de laatste migratie (hiermee worden de codewijzigingen teruggedraaid die zijn uitgevoerd voor de migratie).

Parameters:

Parameter Description
-Force Herstel de migratie (draai de wijzigingen terug die zijn toegepast op de database).
-Connection <String> De verbindingsreeks voor de database. Standaard ingesteld op de waarde die is opgegeven in AddDbContext of OnConfiguring. Toegevoegd in EF Core 11.
-Offline Verwijder de migratie zonder verbinding te maken met de database. Toegevoegd in EF Core 11.

De algemene parameters worden hierboven vermeld.

Note

De -Offline parameters en -Force parameters kunnen niet samen worden gebruikt, omdat -Force hiervoor een databaseverbinding is vereist om te controleren of de migratie is toegepast voordat deze wordt teruggezet.

Scaffold-DbContext

Hiermee genereert u code voor een DbContext en entiteitstypen voor een database. Als Scaffold-DbContext een entiteitstype wilt genereren, moet de databasetabel een primaire sleutel hebben.

Parameters:

Parameter Description
-Connection <String> De verbindingsreeks voor de database. De waarde kan naam=<naam van verbindingsreeks>zijn. In dat geval is de naam afkomstig van de configuratiebronnen die zijn ingesteld voor het project. Dit is een positionele parameter en is vereist.
-Provider <String> De provider die moet worden gebruikt. Dit is meestal de naam van het NuGet-pakket, bijvoorbeeld: Microsoft.EntityFrameworkCore.SqlServer. Dit is een positionele parameter en is vereist.
-OutputDir <String> De map waarin entiteitsklassebestanden worden geplaatst. Paden zijn relatief ten opzichte van de projectmap.
-ContextDir <String> De map waarin het DbContext-bestand moet worden geplaatst. Paden zijn relatief ten opzichte van de projectmap.
-Namespace <String> De naamruimte die moet worden gebruikt voor alle gegenereerde klassen. Wordt standaard gegenereerd vanuit de hoofdnaamruimte en de uitvoermap.
-ContextNamespace <String> De naamruimte die moet worden gebruikt voor de gegenereerde DbContext-klasse. Opmerking: overschrijft -Namespace.
-Context <String> De naam van de DbContext-klasse die moet worden gegenereerd.
-Schemas <String[]> De schema's van tabellen en weergaven voor het genereren van entiteitstypen. Als deze parameter wordt weggelaten, worden alle schema's opgenomen. Als deze optie wordt gebruikt, worden alle tabellen en weergaven in het model opgenomen in het model, zelfs als ze niet expliciet zijn opgenomen met -Table.
-Tables <String[]> De tabellen en weergaven waarvoor entiteitstypen moeten worden gegenereerd. Tabellen of weergaven in een specifiek schema kunnen worden opgenomen met de indeling schema.table of schema.view. Als deze parameter wordt weggelaten, worden alle tabellen en weergaven opgenomen.
-DataAnnotations Gebruik kenmerken om het model te configureren (indien mogelijk). Als deze parameter wordt weggelaten, wordt alleen de fluent-API gebruikt.
-UseDatabaseNames Gebruik tabel-, weergave-, volgorde- en kolomnamen precies zoals ze worden weergegeven in de database. Als deze parameter wordt weggelaten, worden databasenamen gewijzigd zodat ze beter voldoen aan de C#-naamstijlconventies.
-Force Bestaande bestanden overschrijven.
-NoOnConfiguring Genereer geen DbContext.OnConfiguring.
-NoPluralize Gebruik de pluralizer niet.

De algemene parameters worden hierboven vermeld.

Example:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Voorbeeld waarin alleen geselecteerde tabellen worden gegenereerd en de context wordt aangemaakt in een afzonderlijke map met een opgegeven naam en namespace.

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

In het volgende voorbeeld de verbindingsreeks leest met behulp van Configuratie.

Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer

Script-DbContext

Hiermee wordt een SQL-script gegenereerd vanuit DbContext. Omzeilt elke migratie.

Parameters:

Parameter Description
-Output <String> Het bestand waar het resultaat naar moet worden geschreven.

De algemene parameters worden hierboven vermeld.

Script-Migration

Hiermee genereert u een SQL-script waarmee alle wijzigingen van de ene geselecteerde migratie worden toegepast op een andere geselecteerde migratie.

Parameters:

Parameter Description
-From <String> De beginmigratie. Migraties kunnen worden geïdentificeerd op naam of id. Het getal 0 is een speciaal geval dat betekent vóór de eerste migratie. De standaardwaarde is 0.
-To <String> De eindmigratie. Standaard ingesteld op de laatste migratie.
-Idempotent Genereer een script dat kan worden gebruikt voor een database tijdens elke migratie.
-NoTransactions Genereer geen SQL-transactie-instructies.
-Output <String> Het bestand waar het resultaat naar moet worden geschreven. Als deze parameter wordt weggelaten, wordt het bestand gemaakt met een gegenereerde naam in dezelfde map als de runtimebestanden van de app, bijvoorbeeld: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/.

De algemene parameters worden hierboven vermeld.

Tip

De parameters To, Fromen Output ondersteunen tabuitbreiding.

In het volgende voorbeeld wordt een script gemaakt voor de InitialCreate-migratie (van een database zonder migraties), met behulp van de migratienaam.

Script-Migration 0 InitialCreate

In het volgende voorbeeld wordt een script gemaakt voor alle migraties na de InitialCreate-migratie, met behulp van de migratie-id.

Script-Migration 20180904195021_InitialCreate

Update-Database

Hiermee wordt de database bijgewerkt naar de laatste migratie of naar een opgegeven migratie.

Parameter Description
-Migration <String> Doelmigratie. Migraties kunnen worden geïdentificeerd op naam of id. Het getal 0 is een speciaal geval dat betekent vóór de eerste migratie en ervoor zorgt dat alle migraties worden teruggedraaid. Als er geen migratie is opgegeven, wordt de opdracht standaard ingesteld op de laatste migratie.
-Connection <String> De verbindingsreeks voor de database. Standaard ingesteld op de waarde die is opgegeven in AddDbContext of OnConfiguring.
-Add Hiermee maakt u een nieuwe migratie en past u deze in één stap toe op de database. Gebruikt Roslyn om de migratie tijdens runtime te compileren. Wanneer deze is opgegeven, is een migratienaam vereist en wordt de naam voor de nieuwe migratie opgegeven. Toegevoegd in EF Core 11.
-OutputDir <String> De map waarin migratiebestanden moeten worden geplaatst. Paden zijn relatief ten opzichte van de doelmap van het project. Vereist -Add. Toegevoegd in EF Core 11.
-Namespace <String> De naamruimte die moet worden gebruikt voor de gegenereerde migratieklassen. Vereist -Add. Toegevoegd in EF Core 11.
-NoBuild Bouw het project niet voordat u de opdracht uitvoert. Bedoeld om te worden gebruikt wanneer de build up-to-date is. Toegevoegd in EF Core 11.

De algemene parameters worden hierboven vermeld.

Warning

-Migration geeft de status op waarin de database moet staan nadat de opdracht is voltooid. Als de database zich momenteel op een nieuwere migratie bevindt, wordt met de opdracht elke nieuwere migratie teruggezet dan het doel door de Down bewerkingen uit te voeren. Er wordt geen oudere migratie op volgorde toegepast.

Tip

De parameter Migration ondersteunt tabuitbreiding.

In het volgende voorbeeld worden alle migraties teruggedraaid.

Update-Database 0

In de volgende voorbeelden wordt de database bijgewerkt naar een opgegeven migratie. De eerste gebruikt de migratienaam en de tweede maakt gebruik van de migratie-id en een opgegeven verbinding:

Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string

In het volgende voorbeeld wordt een nieuwe migratie gemaakt en in één stap toegepast op de database:

Update-Database -Migration InitialCreate -Add

Aanvullende bronnen