Dokumentacja narzędzi Platformy Entity Framework Core — konsola Menedżer pakietów w programie Visual Studio
Narzędzia konsoli Menedżer pakietów (PMC) dla platformy Entity Framework Core wykonują zadania programistyczne w czasie projektowania. Na przykład tworzą migracje, stosują migracje i generują kod dla modelu na podstawie istniejącej bazy danych. Polecenia są uruchamiane wewnątrz programu Visual Studio przy użyciu konsoli Menedżer pakietów. Te narzędzia współpracują zarówno z projektami .NET Framework, jak i .NET Core.
Jeśli nie używasz programu Visual Studio, zalecamy zamiast tego narzędzia wiersza polecenia platformy EF Core. Narzędzia interfejsu wiersza polecenia platformy .NET Core są międzyplatformowe i uruchamiane w wierszu polecenia.
Ostrzeżenie
W tym artykule jest używana lokalna baza danych, która nie wymaga uwierzytelnienia użytkownika. Aplikacje produkcyjne powinny korzystać z najbezpieczniejszego dostępnego przepływu uwierzytelniania. Aby uzyskać więcej informacji na temat uwierzytelniania dla wdrożonych aplikacji testowych i produkcyjnych, zobacz Bezpieczne przepływy uwierzytelniania.
Instalowanie narzędzi
Zainstaluj narzędzia konsoli Menedżer pakietów, uruchamiając następujące polecenie w konsoli Menedżer pakietów:
Install-Package Microsoft.EntityFrameworkCore.Tools
Zaktualizuj narzędzia, uruchamiając następujące polecenie w konsoli Menedżer pakietów.
Update-Package Microsoft.EntityFrameworkCore.Tools
Weryfikowanie instalacji
Sprawdź, czy narzędzia są zainstalowane, uruchamiając następujące polecenie:
Get-Help about_EntityFrameworkCore
Dane wyjściowe wyglądają następująco (nie informuje o wersji używanych narzędzi):
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
TOPIC
about_EntityFrameworkCore
SHORT DESCRIPTION
Provides information about the Entity Framework Core Package Manager Console Tools.
<A list of available commands follows, omitted here.>
Korzystanie z narzędzi
Przed użyciem narzędzi:
- Zapoznaj się z różnicą między projektem docelowym a projektem startowym.
- Dowiedz się, jak używać narzędzi z bibliotekami klas platformy .NET Standard.
- W przypadku projektów ASP.NET Core ustaw środowisko.
Projekt docelowy i startowy
Polecenia odnoszą się do projektu i projektu startowego.
Projekt jest również znany jako projekt docelowy, ponieważ jest to miejsce, w którym polecenia dodają lub usuń pliki. Domyślnie projekt domyślny wybrany w konsoli Menedżer pakietów to projekt docelowy. Możesz określić inny projekt jako projekt docelowy przy użyciu parametru
.-Project
Projekt startowy jest tym, który narzędzia kompilują i uruchamiają. Narzędzia muszą wykonywać kod aplikacji w czasie projektowania, aby uzyskać informacje o projekcie, takie jak baza danych parametry połączenia i konfiguracja modelu. Domyślnie projekt startowy w programie Eksplorator rozwiązań jest projektem startowym. Możesz określić inny projekt jako projekt startowy przy użyciu parametru
.-StartupProject
Projekt startowy i projekt docelowy są często tym samym projektem. Typowy scenariusz, w którym są oddzielnymi projektami, jest następujący:
- Klasy kontekstu i jednostek platformy EF Core znajdują się w bibliotece klas platformy .NET Core.
- Aplikacja konsolowa platformy .NET Core lub aplikacja internetowa odwołuje się do biblioteki klas.
Można również umieścić kod migracji w bibliotece klas oddzielnie od kontekstu platformy EF Core.
Inne platformy docelowe
Narzędzia konsoli Menedżer pakietów współpracują z projektami .NET Core lub .NET Framework. Aplikacje, które mają model EF Core w bibliotece klas platformy .NET Standard, mogą nie mieć projektu .NET Core lub .NET Framework. Dotyczy to na przykład aplikacji platformy Xamarin i platforma uniwersalna systemu Windows. W takich przypadkach można utworzyć projekt aplikacji konsolowej .NET Core lub .NET Framework, którego jedynym celem jest działanie jako projekt startowy dla narzędzi. Projekt może być fikcyjnym projektem bez rzeczywistego kodu — wystarczy podać element docelowy dla narzędzi.
Dlaczego wymagany jest fikcyjny projekt? Jak wspomniano wcześniej, narzędzia muszą wykonywać kod aplikacji w czasie projektowania. W tym celu muszą używać środowiska uruchomieniowego .NET Core lub .NET Framework. Gdy model EF Core znajduje się w projekcie przeznaczonym dla platformy .NET Core lub .NET Framework, narzędzia EF Core pożyczają środowisko uruchomieniowe z projektu. Nie mogą tego zrobić, jeśli model EF Core znajduje się w bibliotece klas platformy .NET Standard. .NET Standard nie jest rzeczywistą implementacją platformy .NET; jest to specyfikacja zestawu interfejsów API, które muszą obsługiwać implementacje platformy .NET. W związku z tym platforma .NET Standard nie jest wystarczająca, aby narzędzia EF Core wykonywały kod aplikacji. Fikcyjny projekt używany jako projekt startowy udostępnia konkretną platformę docelową, w której narzędzia mogą załadować bibliotekę klas platformy .NET Standard.
środowisko ASP.NET Core
Środowisko dla projektów ASP.NET Core można określić w wierszu polecenia. Te i wszelkie dodatkowe argumenty są przekazywane do programu Program.CreateHostBuilder.
Update-Database -Args '--environment Production'
Wspólne parametry
W poniższej tabeli przedstawiono parametry wspólne dla wszystkich poleceń platformy EF Core:
Parametr | Opis |
---|---|
-Context <String> |
Klasa DbContext do użycia. Tylko nazwa klasy lub w pełni kwalifikowana z przestrzeniami nazw. Jeśli ten parametr zostanie pominięty, program EF Core znajdzie klasę kontekstu. Jeśli istnieje wiele klas kontekstu, ten parametr jest wymagany. |
-Project <String> |
Projekt docelowy. Jeśli ten parametr zostanie pominięty, domyślny projekt dla konsoli Menedżer pakietów jest używany jako projekt docelowy. |
-StartupProject <String> |
Projekt startowy. Jeśli ten parametr zostanie pominięty, jako projekt docelowy zostanie użyty projekt startowy we właściwościach rozwiązania. |
-Args <String> |
Argumenty przekazane do aplikacji. |
-Verbose |
Pokaż pełne dane wyjściowe. |
Aby wyświetlić informacje pomocy dotyczące polecenia, użyj polecenia programu PowerShell Get-Help
.
Napiwek
Parametry Context
, Project
i StartupProject
obsługują rozszerzanie tabulatorów.
Dodawanie migracji
Dodaje nową migrację.
Parametry:
Parametr | Opis |
---|---|
-Name <String> |
Nazwa migracji. Jest to parametr pozycyjny i jest wymagany. |
-OutputDir <String> |
Katalog służy do wyprowadzania plików. Ścieżki są względne względem docelowego katalogu projektu. Wartość domyślna to "Migrations" (Migracje). |
-Namespace <String> |
Przestrzeń nazw do użycia dla wygenerowanych klas. Wartość domyślna do wygenerowania z katalogu wyjściowego. |
Typowe parametry są wymienione powyżej.
Migracja pakietu
Tworzy plik wykonywalny w celu zaktualizowania bazy danych.
Parametry:
Parametr | Opis |
---|---|
-Output <String> |
Ścieżka pliku wykonywalnego do utworzenia. |
-Force |
Zastąp istniejące pliki. |
-SelfContained |
Należy również powiązać środowisko uruchomieniowe platformy .NET, aby nie trzeba było go instalować na maszynie. |
-TargetRuntime <String> |
Docelowe środowisko uruchomieniowe do pakietu. |
-Framework <String> |
Struktura docelowa. Domyślnie jest to pierwszy z nich w projekcie. |
Typowe parametry są wymienione powyżej.
Drop-Database
Pomiń bazę danych.
Parametry:
Parametr | Opis |
---|---|
-WhatIf |
Pokaż, która baza danych zostanie porzucona, ale nie upuść jej. |
Typowe parametry są wymienione powyżej.
Get-DbContext
Wyświetla listę i pobiera informacje o dostępnych DbContext
typach.
Typowe parametry są wymienione powyżej.
Get-Migration
Wyświetla listę dostępnych migracji.
Parametry:
Parametr | Opis |
---|---|
-Connection <String> |
Parametry połączenia do bazy danych. Wartość domyślna to określona w elemecie AddDbContext lub OnConfiguring. |
-NoConnect |
Nie łącz się z bazą danych. |
Typowe parametry są wymienione powyżej.
Optimize-DbContext
Generuje skompilowaną wersję modelu używanego przez program DbContext
.
Aby uzyskać więcej informacji, zobacz Kompilowane modele .
Parametry:
Parametr | Opis |
---|---|
-OutputDir <String> |
Katalog do umieszczania plików. Ścieżki są względne względem katalogu projektu. |
-Namespace <String> |
Przestrzeń nazw do użycia dla wszystkich wygenerowanych klas. Domyślnie są generowane z głównej przestrzeni nazw i katalogu wyjściowego oraz CompiledModels . |
Typowe parametry są wymienione powyżej.
Uwaga
Narzędzia PMC obecnie nie obsługują generowania kodu wymaganego do kompilacji nativeAOT i wstępnie skompilowanych zapytań.
W poniższym przykładzie użyto wartości domyślnych i działa, jeśli w projekcie znajduje się tylko jeden DbContext
element:
Optimize-DbContext
Poniższy przykład optymalizuje model dla kontekstu o określonej nazwie i umieszcza go w osobnym folderze i przestrzeni nazw:
Optimize-DbContext -OutputDir Models -Namespace BlogModels -Context BlogContext
Usuwanie migracji
Usuwa ostatnią migrację (przywraca zmiany kodu, które zostały wykonane na potrzeby migracji).
Parametry:
Parametr | Opis |
---|---|
-Force |
Przywróć migrację (wycofaj zmiany zastosowane do bazy danych). |
Typowe parametry są wymienione powyżej.
Szkielet-DbContext
Generuje kod dla DbContext
typów jednostek i dla bazy danych. Aby Scaffold-DbContext
wygenerować typ jednostki, tabela bazy danych musi mieć klucz podstawowy.
Parametry:
Parametr | Opis |
---|---|
-Connection <String> |
Parametry połączenia do bazy danych. Wartość może być name=<name parametry połączenia>. W takim przypadku nazwa pochodzi ze źródeł konfiguracji skonfigurowanych dla projektu. Jest to parametr pozycyjny i jest wymagany. |
-Provider <String> |
Dostawca do użycia. Zazwyczaj jest to nazwa pakietu NuGet, na przykład: Microsoft.EntityFrameworkCore.SqlServer . Jest to parametr pozycyjny i jest wymagany. |
-OutputDir <String> |
Katalog do umieszczania plików klasy jednostki. Ścieżki są względne względem katalogu projektu. |
-ContextDir <String> |
Katalog do umieszczenia DbContext pliku. Ścieżki są względne względem katalogu projektu. |
-Namespace <String> |
Przestrzeń nazw do użycia dla wszystkich wygenerowanych klas. Domyślnie są generowane z głównej przestrzeni nazw i katalogu wyjściowego. |
-ContextNamespace <String> |
Przestrzeń nazw do użycia dla wygenerowanej DbContext klasy. Uwaga: zastępuje wartość -Namespace . |
-Context <String> |
Nazwa DbContext klasy do wygenerowania. |
-Schemas <String[]> |
Schematy tabel i widoków do generowania typów jednostek. Jeśli ten parametr zostanie pominięty, zostaną uwzględnione wszystkie schematy. Jeśli ta opcja jest używana, wszystkie tabele i widoki w schematach zostaną uwzględnione w modelu, nawet jeśli nie zostaną jawnie dołączone przy użyciu -Table. |
-Tables <String[]> |
Tabele i widoki do generowania typów jednostek. Tabele lub widoki w określonym schemacie można uwzględnić przy użyciu formatu "schema.table" lub "schema.view". Jeśli ten parametr zostanie pominięty, zostaną uwzględnione wszystkie tabele i widoki. |
-DataAnnotations |
Użyj atrybutów, aby skonfigurować model (jeśli to możliwe). Jeśli ten parametr zostanie pominięty, używany jest tylko płynny interfejs API. |
-UseDatabaseNames |
Użyj nazw tabel, widoków, sekwencji i kolumn dokładnie tak, jak są wyświetlane w bazie danych. Jeśli ten parametr zostanie pominięty, nazwy baz danych zostaną zmienione tak, aby były bardziej zgodne z konwencjami stylu nazw języka C#. |
-Force |
Zastąp istniejące pliki. |
-NoOnConfiguring |
Nie generuj DbContext.OnConfiguring . |
-NoPluralize |
Nie używaj pluralizatora. |
Typowe parametry są wymienione powyżej.
Przykład:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Przykład przedstawiający tworzenie szkieletów tylko wybranych tabel i tworzenie kontekstu w osobnym folderze o określonej nazwie i przestrzeni nazw:
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
Poniższy przykład odczytuje parametry połączenia przy użyciu konfiguracji.
Scaffold-DbContext "Name=ConnectionStrings:Blogging" Microsoft.EntityFrameworkCore.SqlServer
Script-DbContext
Generuje skrypt SQL z obiektu DbContext. Pomija wszelkie migracje.
Parametry:
Parametr | Opis |
---|---|
-Output <String> |
Plik do zapisania wyniku. |
Typowe parametry są wymienione powyżej.
Migracja skryptów
Generuje skrypt SQL, który stosuje wszystkie zmiany z jednej wybranej migracji do innej wybranej migracji.
Parametry:
Parametr | Opis |
---|---|
-From <String> |
Rozpoczynanie migracji. Migracje mogą być identyfikowane według nazwy lub identyfikatora. Numer 0 jest specjalnym przypadkiem, co oznacza przed pierwszą migracją. Wartość domyślna to 0. |
-To <String> |
Zakończenie migracji. Domyślnie jest to ostatnia migracja. |
-Idempotent |
Wygeneruj skrypt, który może być używany w bazie danych w dowolnej migracji. |
-NoTransactions |
Nie generuj instrukcji transakcji SQL. |
-Output <String> |
Plik do zapisania wyniku. Jeśli ten parametr zostanie pominięty, plik zostanie utworzony z wygenerowaną nazwą w tym samym folderze co pliki środowiska uruchomieniowego aplikacji, na przykład: /obj/Debug/netcoreapp2.1/ghbkztfz.sql/. |
Typowe parametry są wymienione powyżej.
Napiwek
Parametry To
, From
i Output
obsługują rozszerzanie tabulatorów.
Poniższy przykład tworzy skrypt dla migracji InitialCreate (z bazy danych bez żadnych migracji) przy użyciu nazwy migracji.
Script-Migration 0 InitialCreate
Poniższy przykład tworzy skrypt dla wszystkich migracji po migracji InitialCreate przy użyciu identyfikatora migracji.
Script-Migration 20180904195021_InitialCreate
Update-Database
Aktualizuje bazę danych do ostatniej migracji lub do określonej migracji.
Parametr | Opis |
---|---|
-Migration <String> |
Migracja docelowa. Migracje mogą być identyfikowane według nazwy lub identyfikatora. Liczba 0 jest specjalnym przypadkiem, co oznacza przed pierwszą migracją i powoduje przywrócenie wszystkich migracji. Jeśli migracja nie zostanie określona, polecenie zostanie domyślnie ustawione na ostatnią migrację. |
-Connection <String> |
Parametry połączenia do bazy danych. Domyślnie jest to wartość określona w AddDbContext elem lub OnConfiguring . |
Typowe parametry są wymienione powyżej.
Napiwek
Parametr Migration
obsługuje rozszerzenie tabulacji.
Poniższy przykład przywraca wszystkie migracje.
Update-Database 0
Poniższe przykłady aktualizują bazę danych do określonej migracji. Pierwszy używa nazwy migracji, a drugi używa identyfikatora migracji i określonego połączenia:
Update-Database InitialCreate
Update-Database 20180904195021_InitialCreate -Connection your_connection_string