Dela via


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, Projectoch 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, Fromoch 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

Ytterligare resurser