Referentiehandleiding voor Entity Framework Core-tools - Package Manager-console in Visual Studio
De hulpprogramma's van de Package Manager 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 Package Manager Console. Deze hulpprogramma's werken met zowel .NET Framework- als .NET Core-projecten.
Als u Visual Studio niet gebruikt, raden we u in plaats daarvan de EF Core-opdrachtregeltools aan. De .NET Core CLI-hulpprogramma's zijn platformoverschrijdend en worden uitgevoerd in een opdrachtprompt.
Waarschuwing
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 Package Manager Console-hulpprogramma's door de volgende opdracht uit te voeren in Package Manager Console:
Install-Package Microsoft.EntityFrameworkCore.Tools
Werk de hulpprogramma's bij door de volgende opdracht uit te voeren in Package Manager 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 Package Manager 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 Core-klassebibliotheek.
- Een .NET Core-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 Package Manager Console-hulpprogramma's werken met .NET Core- of .NET Framework-projecten. Apps met het EF Core-model in een .NET Standard-klassebibliotheek hebben mogelijk geen .NET Core- of .NET Framework-project. Dit geldt bijvoorbeeld voor Xamarin- en Universal Windows Platform-apps. In dergelijke gevallen kunt u een .NET Core- of .NET Framework-console-appproject maken waarvan het enige doel is om te fungeren als opstartproject voor de hulpprogramma's. Het project kan een dummyproject zijn zonder echte code. Het is alleen nodig om de tooling een doel te geven.
Belangrijk
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.
Waarom is een dummyproject vereist? Zoals eerder vermeld, moeten de hulpprogramma's toepassingscode uitvoeren tijdens het ontwerp. Hiervoor moeten ze de .NET Core- of .NET Framework-runtime gebruiken. Wanneer het EF Core-model zich in een project bevindt dat gericht is op .NET Core of .NET Framework, lenen de EF Core-hulpprogramma's de runtime van het project. Ze kunnen dat niet doen als het EF Core-model zich in een .NET Standard-klassebibliotheek bevindt. De .NET Standard is geen echte .NET-implementatie; het is een specificatie van een set API's die .NET-implementaties moeten ondersteunen. Daarom is .NET Standard niet voldoende voor de EF Core-hulpprogramma's om toepassingscode uit te voeren. Het dummyproject dat u maakt om te gebruiken als opstartproject biedt een concreet doelplatform waarin de hulpprogramma's de .NET Standard-klassebibliotheek kunnen laden.
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 | Beschrijving |
---|---|
-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 Package Manager 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
, Project
en StartupProject
ondersteunen tabuitbreiding.
Add-Migration
Hiermee voegt u een nieuwe migratie toe.
Parameters:
Parameter | Beschrijving |
---|---|
-Name <String> |
De naam van de migratie. Dit is een positionele parameter en is vereist. |
-OutputDir <String> |
De map die wordt gebruikt om de bestanden uit te voeren. 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. |
De algemene parameters worden hierboven vermeld.
Bundle-Migration
Hiermee maakt u een uitvoerbaar bestand om de database bij te werken.
Parameters:
Parameter | Beschrijving |
---|---|
-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 | Beschrijving |
---|---|
-WhatIf |
Geef weer welke database gedropt zou worden, maar drop deze niet. |
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 | Beschrijving |
---|---|
-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 | Beschrijving |
---|---|
-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.
Notitie
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 | Beschrijving |
---|---|
-Force |
Herstel de migratie (draai de wijzigingen terug die zijn toegepast op de database). |
De algemene parameters worden hierboven vermeld.
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 | Beschrijving |
---|---|
-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.
Voorbeeld:
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 | Beschrijving |
---|---|
-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 | Beschrijving |
---|---|
-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
, From
en 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 | Beschrijving |
---|---|
-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 . |
De algemene parameters worden hierboven vermeld.
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