Referens för Entity Framework Core-verktyg – Package Manager-konsolen i Visual Studio
Verktygen för Package Manager Console (PMC) för Entity Framework Core utför utvecklingsuppgifter under designfasen. De skapar till exempel migreringar, tillämpar migreringar och genererar kod för en modell baserat på en befintlig databas. Kommandona körs i Visual Studio med Package Manager-konsolen. Dessa verktyg fungerar med både .NET Framework- och .NET Core-projekt.
Om du inte använder Visual Studio rekommenderar vi EF Core-kommandoradsverktyg i stället. .NET Core CLI-verktygen är plattformsoberoende och körs i en kommandotolk.
Varning
Den här artikeln använder en lokal databas som inte kräver att användaren autentiseras. Produktionsappar bör använda det säkraste tillgängliga autentiseringsflödet. Mer information om autentisering för distribuerade test- och produktionsappar finns i Säkra autentiseringsflöden.
Installera verktygen
Installera Pakethanterarens konsolverktyg genom att köra följande kommando i Package Manager Console:
Install-Package Microsoft.EntityFrameworkCore.Tools
Uppdatera verktygen genom att köra följande kommando i Package Manager Console.
Update-Package Microsoft.EntityFrameworkCore.Tools
Kontrollera installationen
Kontrollera att verktygen har installerats genom att köra det här kommandot:
Get-Help about_EntityFrameworkCore
Utdata ser ut så här (det anger inte vilken version av verktygen du använder):
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
TOPIC
about_EntityFrameworkCore
SHORT DESCRIPTION
Provides information about the Entity Framework Core Package Manager Console Tools.
<A list of available commands follows, omitted here.>
Använda verktygen
Innan du använder verktygen:
- Förstå skillnaden mellan mål- och startprojekt.
- Lär dig hur du använder verktygen med .NET Standard-klassbibliotek.
- Ange miljön för ASP.NET Core-projekt.
Mål- och startprojekt
Kommandona refererar till ett projekt och ett startprojekt.
Det projektet kallas även målprojekt eftersom det är där kommandona lägger till eller tar bort filer. Som standard är det projekt som har markeringen Default project i Package Manager Console det målprojektet. Du kan ange ett annat projekt som målprojekt med hjälp av parametern
.-Project
Det startprojektet är det som verktygen skapar och kör. Verktygen måste köra programkod vid designtillfället för att få information om projektet, till exempel databasanslutningssträngen och konfigurationen av modellen. Som standard är Startprojekt i Solution Explorer startprojektet. Du kan ange ett annat projekt som startprojekt med hjälp av parametern
.-StartupProject
Startprojektet och målprojektet är ofta samma projekt. Ett typiskt scenario där de är separata projekt är när:
- EF Core-kontext- och entitetsklasserna finns i ett .NET Core-klassbibliotek.
- En .NET Core-konsolapp eller webbapp refererar till klassbiblioteket.
Det är också möjligt att placera migreringskod i ett klassbibliotek separat från EF Core-kontexten.
Andra målramverk
Pakethanterarens konsolverktyg fungerar med .NET Core- eller .NET Framework-projekt. Appar som har EF Core-modellen i ett .NET Standard-klassbibliotek kanske inte har något .NET Core- eller .NET Framework-projekt. Detta gäller till exempel för Xamarin- och Universal Windows Platform-appar. I sådana fall kan du skapa ett .NET Core- eller .NET Framework-konsolappprojekt vars enda syfte är att fungera som startprojekt för verktygen. Projektet kan vara ett dummyprojekt utan verklig kod – det behövs bara för att ange ett mål för verktygen.
Viktig
Xamarin.Android, Xamarin.iOS, Xamarin.Mac är nu direkt integrerade i .NET (från och med .NET 6) som .NET för Android, .NET för iOS och .NET för macOS. Om du skapar med dessa projekttyper i dag bör de uppgraderas till .NET SDK-liknande projekt för fortsatt support. Mer information om hur du uppgraderar Xamarin-projekt till .NET finns i dokumentationen Upgrade from Xamarin to .NET & .NET MAUI.
Varför krävs ett dummyprojekt? Som tidigare nämnts måste verktygen köra programkod vid designtillfället. För att göra det måste de använda .NET Core- eller .NET Framework-körning. När EF Core-modellen finns i ett projekt som riktar sig mot .NET Core eller .NET Framework, lånar EF Core-verktygen körmiljön från projektet. Det kan de inte göra om EF Core-modellen finns i ett klassbibliotek för .NET Standard. .NET Standard är inte en faktisk .NET-implementering. det är en specifikation av en uppsättning API:er som .NET-implementeringar måste stödja. Därför räcker det inte med .NET Standard för att EF Core-verktygen ska kunna köra programkod. Det dummy-projekt som du skapar för att använda som startprojekt ger en konkret målplattform där verktygen kan läsa in klassbiblioteket för .NET Standard.
ASP.NET Core-miljö
Du kan ange miljön för ASP.NET Core-projekt på kommandoraden. Detta och eventuella ytterligare argument skickas till Program.CreateHostBuilder.
Update-Database -Args '--environment Production'
Vanliga parametrar
I följande tabell visas parametrar som är gemensamma för alla EF Core-kommandon:
Parameter | Beskrivning |
---|---|
-Context <String> |
Den DbContext klass som ska användas. Endast klassnamn eller fullständigt specificerat med namnrymder. Om den här parametern utelämnas hittar EF Core kontextklassen. Om det finns flera kontextklasser krävs den här parametern. |
-Project <String> |
Målprojektet. Om den här parametern utelämnas används standardprojektet för Package Manager Console som målprojekt. |
-StartupProject <String> |
Startupprojektet Om den här parametern utelämnas används Startup-projektet i Lösningsegenskaper som målprojekt. |
-Args <String> |
Argument som ges till applikationen. |
-Verbose |
Visa utförliga utdata. |
Om du vill visa hjälpinformation om ett kommando använder du PowerShells Get-Help
kommando.
Tips
Parametrarna Context
, Project
och StartupProject
stöder tab-expansion.
Add-Migration
Lägger till en ny migrering.
Parametrar:
Parameter | Beskrivning |
---|---|
-Name <String> |
Namnet på migreringen. Detta är en positionsparameter och krävs. |
-OutputDir <String> |
Katalogen som används för att mata ut filerna. Sökvägarna är relativa till målprojektkatalogen. Standardvärdet är "Migreringar". |
-Namespace <String> |
Namnområdet som ska användas för de genererade klasserna. Som standard genereras från utdatakatalogen. |
De vanliga parametrarna visas ovan.
Bundle-Migration
Skapar en körbar fil för att uppdatera databasen.
Parametrar:
Parameter | Beskrivning |
---|---|
-Output <String> |
Sökvägen till den körbara fil som ska skapas. |
-Force |
Skriv över befintliga filer. |
-SelfContained |
Bunta ihop .NET-körmiljön så att den inte behöver installeras på datorn. |
-TargetRuntime <String> |
Målkörningen som ska paketas för. |
-Framework <String> |
Målramverket. Som standard används den första i projektet. |
De vanliga parametrarna visas ovan.
Drop-Database
Raderar databasen.
Parametrar:
Parameter | Beskrivning |
---|---|
-WhatIf |
Visa vilken databas som skulle tas bort, men släpp den inte. |
De vanliga parametrarna visas ovan.
Get-DbContext
Listar och visar information om tillgängliga DbContext
-typer.
De vanliga parametrarna visas ovan.
Get-Migration
Visar tillgängliga migreringar.
Parametrar:
Parameter | Beskrivning |
---|---|
-Connection <String> |
Anslutningssträngen till databasen. Standardvärdet är det som anges i AddDbContext eller OnConfiguring. |
-NoConnect |
Anslut inte till databasen. |
De vanliga parametrarna visas ovan.
Optimize-DbContext
Genererar en kompilerad version av modellen som används av DbContext
.
Mer information finns i Kompilerade modeller.
Parametrar:
Parameter | Beskrivning |
---|---|
-OutputDir <String> |
Katalogen där filer ska placeras. Sökvägarna är relativa till projektkatalogen. |
-Namespace <String> |
Namnområdet som ska användas för alla genererade klasser. Som standard genereras från rotnamnområdet och utdatakatalogen plus CompiledModels . |
De vanliga parametrarna visas ovan.
Anteckning
PMC-verktygen stöder för närvarande inte att generera kod som krävs för NativeAOT-kompilering och förkompilerade frågor.
I följande exempel används standardvärdena och fungerar om det bara finns en DbContext
i projektet:
Optimize-DbContext
I följande exempel optimeras modellen för kontexten med det angivna namnet och placerar den i en separat mapp och ett namnområde:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Remove-Migration
Tar bort den senaste migreringen (återställer de kodändringar som gjordes för migreringen).
Parametrar:
Parameter | Beskrivning |
---|---|
-Force |
Återställ migreringen (återställ de ändringar som tillämpades på databasen). |
De vanliga parametrarna visas ovan.
Scaffold-DbContext
Genererar kod för en DbContext
och entitetstyper för en databas. För att Scaffold-DbContext
ska kunna generera en entitetstyp måste databastabellen ha en primärnyckel.
Parametrar:
Parameter | Beskrivning |
---|---|
-Connection <String> |
Anslutningssträngen till databasen. Värdet kan vara name=<namnet på anslutningssträngen>. I så fall kommer namnet från konfigurationskällor som har konfigurerats för projektet. Detta är en positionsparameter och krävs. |
-Provider <String> |
Providern som ska användas. Det här är vanligtvis namnet på NuGet-paketet, till exempel: Microsoft.EntityFrameworkCore.SqlServer . Detta är en positionsparameter och krävs. |
-OutputDir <String> |
Katalogen som entitetsklassfiler ska placeras i. Sökvägarna är relativa till projektkatalogen. |
-ContextDir <String> |
Katalogen som filen DbContext ska placeras i. Sökvägarna är relativa till projektkatalogen. |
-Namespace <String> |
Namnområdet som ska användas för alla genererade klasser. Som standard genereras från rotnamnområdet och utdatakatalogen. |
-ContextNamespace <String> |
Namnområdet som ska användas för den genererade DbContext -klassen. Observera: åsidosätter -Namespace . |
-Context <String> |
Namnet på den DbContext klass som ska genereras. |
-Schemas <String[]> |
Scheman för tabeller och vyer som ska generera entitetstyper för. Om den här parametern utelämnas inkluderas alla scheman. Om det här alternativet används inkluderas alla tabeller och vyer i schemana i modellen, även om de inte uttryckligen ingår i -Table. |
-Tables <String[]> |
Tabeller och vyer som ska generera entitetstyper för. Tabeller eller vyer i ett visst schema kan inkluderas med formatet "schema.table" eller "schema.view". Om den här parametern utelämnas inkluderas alla tabeller och vyer. |
-DataAnnotations |
Använd attribut för att konfigurera modellen (där det är möjligt). Om den här parametern utelämnas används endast api:et fluent. |
-UseDatabaseNames |
Använd tabell-, vy-, sekvens- och kolumnnamn exakt som de visas i databasen. Om den här parametern utelämnas ändras databasnamnen så att de bättre överensstämmer med C#-namnformatkonventionerna. |
-Force |
Skriv över befintliga filer. |
-NoOnConfiguring |
Generera inte DbContext.OnConfiguring . |
-NoPluralize |
Använd inte pluraliseraren. |
De vanliga parametrarna visas ovan.
Exempel:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Exempel som endast genererar utvalda tabeller och skapar kontexten i en separat mapp med ett angivet namn och namnområde.
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
Följande exempel läser anslutningssträngen med hjälp av Configuration.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Genererar ett SQL-skript från DbContext. Kringgår alla migreringar.
Parametrar:
Parameter | Beskrivning |
---|---|
-Output <String> |
Filen som resultatet ska skrivas till. |
De vanliga parametrarna visas ovan.
Script-Migration
Genererar ett SQL-skript som tillämpar alla ändringar från en vald migrering på en annan vald migrering.
Parametrar:
Parameter | Beskrivning |
---|---|
-From <String> |
Den påbörjade migreringen. Migreringar kan identifieras med namn eller ID. Talet 0 är ett specialfall vilket betyder att det är före den första migreringen. Standardvärdet är 0. |
-To <String> |
Den avslutande migreringen. Standardvärdet är till den senaste migreringen. |
-Idempotent |
Generera ett skript som kan användas i en databas vid valfri migrering. |
-NoTransactions |
Generera inte SQL-transaktionsinstruktioner. |
-Output <String> |
Filen som resultatet ska skrivas till. Om den här parametern utelämnas skapas filen med ett genererat namn i samma mapp som appens körningsfiler skapas, till exempel: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
De vanliga parametrarna visas ovan.
Tips
Parametrarna To
, From
och Output
stöder tab-expansion.
I följande exempel skapas ett skript för migreringen InitialCreate (från en databas utan migreringar) med hjälp av migreringsnamnet.
Script-Migration 0 InitialCreate
I följande exempel skapas ett skript för alla migreringar efter migreringen InitialCreate med hjälp av migrerings-ID:t.
Script-Migration 20180904195021_InitialCreate
Update-Database
Uppdaterar databasen till den senaste migreringen eller till en angiven migrering.
Parameter | Beskrivning |
---|---|
-Migration <String> |
Målmigration. Migreringar kan identifieras med namn eller ID. Talet 0 är ett specialfall som betyder före den första migreringen och leder till att alla migreringar återställs. Om ingen migrering har angetts är kommandot standard för den senaste migreringen. |
-Connection <String> |
Anslutningssträngen till databasen. Standardvärdet är det som specificeras i AddDbContext eller OnConfiguring . |
De vanliga parametrarna visas ovan.
Tips
Parametern Migration
stöder tab-expansion.
I följande exempel återställs alla migreringar.
Update-Database 0
I följande exempel uppdateras databasen till en angiven migrering. Den första använder migreringsnamnet och det andra använder migrerings-ID:t och en angiven anslutning:
Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string