Paweł Łukasiewicz
2021-09-10
Paweł Łukasiewicz
2021-09-10
Udostępnij Udostępnij Kontakt
Wprowadzenie

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.:

<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />

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.