Polecenia migracyjne mogą być wykonywane w konsoli menadżera pakietów NuGet oraz w interfejsie wiersza poleceń dotnet. W tym wpisie zapoznamy się (nie tylko z najpopularniejszymi) ale wszystkimi dostępnymi poleceniami. Wykorzystamy oficjalną dokumentację, żeby zapoznać się z możliwościami i różnymi parametrami danych poleceń.
Package Manager Console
Tak jak wspomniałem w poprzednim wpisie konsola menadżera pakietów dostępna jest w Visual Studio z poziomu: Tools -> NuGet Package Manager -> Package Manager Console
Konsola pozwala na wykonywanie poniższych poleceń:
Polecenia
Wykorzystanie
get-help entityframework
Wyświetlenie szczegółowych informacji dotyczących poleceń w Entity Framework Core.
add-migration <nazwa migracji>
Utworzenie migracji poprzez dodanie migawki.
remove-migration
Usunięcie ostatniej migracji o ile nie została nałożona na bazę danych.
update-database
Aktualizacja schematu bazy danych w celu zachowania spójności pomiędzy modelem EF Core.
script-migration
Tworzenie skryptu SQL zawierającego wszystkie migracje.
scaffold-dbcontext
Wygenerowanie kontekstu oraz klas domenowych na bazie istniejącego schematu bazy danych. Proces ten nazywany jest inżynierą wsteczną.
get-dbcontext
Uzyskanie informacji dotyczących typu kontekstu.
drop-database
Usunięcie bazy danych.
Większość powyższych poleceń jest już nam dobrze znana. Te, których nie omawialiśmy szczegółowo mają jasną defincję. Możemy jednak wykorzystać konsolę menadżera pakietów, żeby uzyskać szczegółowe informacje dotyczące poszczególnych poleceń oraz przekazywanych parametrów. W tym celu możemy posłużyć się pierwszym poleceniem z tabeli, tj.:
get-help entityframework
W efekcie otrzymamy informację o wszystkich dostępnych poleceniach oraz możliwość sprawdzenia szczegółów każdego z nich:
_/\__
---==/ \\
___ ___ |. \|\
| __|| __| | ) \\\
| _| | _| \_/ | //|\\
|___||_| / \\\/\\
TOPIC
about_EntityFrameworkCore
SHORT DESCRIPTION
Provides information about the Entity Framework Core Package Manager Console Tools.
LONG DESCRIPTION
This topic describes the Entity Framework Core Package Manager Console Tools. See https://docs.efproject.net for
information on Entity Framework Core.
The following Entity Framework Core commands are available.
Cmdlet Description
-------------------------- ---------------------------------------------------
Add-Migration Adds a new migration.
Drop-Database Drops the database.
Get-DbContext Lists and gets information about available DbContext types.
Get-Migration Lists available migrations.
Remove-Migration Removes the last migration.
Scaffold-DbContext Scaffolds a DbContext and entity types for a database.
Script-DbContext Generates a SQL script from the DbContext. Bypasses any migrations.
Script-Migration Generates a SQL script from migrations.
Update-Database Updates the database to a specified migration.
SEE ALSO
Add-Migration
Drop-Database
Get-DbContext
Get-Migration
Remove-Migration
Scaffold-DbContext
Script-DbContext
Script-Migration
Update-Database
Jeżeli chcemy uzyskać szczegółowe informacje dotyczące polecenia dodawania nowej migracji posłużymy się poniższym wywołaniem:
get-help add-migration
W efekcie otrzymujemy "ściągawkę" dotyczącą danego polecenia:
NAME
Add-Migration
SYNOPSIS
Adds a new migration.
SYNTAX
Add-Migration [-Name] <String> [-OutputDir <String>] [-Context <String>] [-Project <String>] [-StartupProject <String>] [-Namespace <String>] [-Args <String>] [<CommonParameters>]
DESCRIPTION
Adds a new migration.
RELATED LINKS
Remove-Migration
Update-Database
about_EntityFrameworkCore
REMARKS
To see the examples, type: "get-help Add-Migration -examples".
For more information, type: "get-help Add-Migration -detailed".
For technical information, type: "get-help Add-Migration -full".
For online help, type: "get-help Add-Migration -online"
Podobnie możemy postąpić z każdym wspomnianym powyżej poleceniem.
dotnet CLI
Podobnie wygląda sytuacja w przypadku dotnet CLI. Musimy jednak pamiętać, że w tym wypadku wymagana jest paczka Microsoft.EntityFrameworkCore.Tools.DotNet
W przypadku problemów z instalacją możemy posłużyć się rozwiązaniem w którym ręcznie zmodyfikujemy plik *.csproj. W tym celu musimy dodać poniższą linię do definicji ItemGroup.:
Po poprawnej instalacji możemy przejść do folderu głównego projektu otwierając wiersz poleceń i wpisując poniższe polecenie:
dotnet ef --help
Po tym kroku powinniśmy dostać odpowiedź z konsoli:
C:\Users\Pawel-PC\source\repos\EFCoreCodeFirst>dotnet ef --help
Entity Framework Core .NET Command-line Tools 5.0.0
Usage: dotnet ef [options] [command]
Options:
--version Show version information
-h|--help Show help information
-v|--verbose Show verbose output.
--no-color Don't colorize output.
--prefix-output Prefix output with level.
Commands:
database Commands to manage the database.
dbcontext Commands to manage DbContext types.
migrations Commands to manage migrations.
Use "dotnet ef [command] --help" for more information about a command.
C:\Users\Pawel-PC\source\repos\EFCoreCodeFirst>
Pierwsze co rzuca się w oczy to trzy dostępne polecenia: database, dbcontext oraz migrations, które składają się z różnych podpoleceń opisanych poniżej:
Polecenie
Podpolecenie
Wykorzystanie
Database
drop
Kasowanie bazy danych.
update
Aktualizacja bazy danych na bazie migracji.
DbContext
info
Pobranie informacji dotyczących kontekstu.
list
Lista dostępnych typów DbContext.
scaffold
Tworzenie kontekstu oraz encji dla bazy danych.
Migration
add
Dodanie nowej migracji.
list
Lista dostępnych migracji.
remove
Usunięcie ostatniej migracji.
script:
Tworzenie skryptu SQL z dostępnych migracji.
Podsumowanie
Doszliśmy do końca długiego cyklu dotyczącego EF Core 5.0. Czynnikiem motywującym do napisania tych wszystkich wpisów była chęć poznania tej technologii związana ze zmianą pracodawcy.
Moglibyście zapytanie: nigdy nie korzystałeś z Entity Framework? Korzystałem w swoich własnych projektach...
Czasem nie w pełni świadomie, czasem brakowało mi podstaw przy tworzeniu relacji, czasem zaczynałem tworzyć nowe rzeczy pytając o brakującą w danym momencie funkcjonalność. Problemy udało się rozwiązywać ale bez szerokiego spojrzenia na całą technologię. Teraz, po dodaniu tych wszystkich wpisów, pracując nad kolejnym projektem od razu zapala się w głowie zielone światło mówiące: tak, do tego musimy wykorzystać Fluent API ponieważ domyślna konwencja nie zadziała, nic się nie stało: możemy łatwo cofnąć ostanią migrację celem naprawy źle zamodelowanych relacji pomiędzy nowymi tabelami, czemu czas ładowania danych powiązanych jest taki długi: może lazy loading jest tutaj nie na miejscu, i wiele, wiele więcej.
Mam nadzieję, że po osiągnięciu tego punktu możecie wyciągnąć podobne wnioski oraz, że praca z EF Core będzie łatwiejsza, przyjemniejsza oraz pozwoli Wam na tworzenie ciekawych projektów.
Doceniasz moją pracę? Wesprzyj bloga 'kupując mi kawę'.
Jeżeli seria wpisów dotycząca Entity Framework Core była dla Ciebie pomocna, pozwoliła Ci rozwinąć obecne umiejętności lub dzięki niej nauczyłeś się czegoś nowego... będę wdzięczny za wsparcie w każdej postaci wraz z wiadomością, którą będę miał przyjemność przeczytać.
Z góry dziekuje za każde wsparcie - i pamiętajcie, wpisy były, są i będą za darmo!