Migracje w EF Core – w poszukiwaniu jednorożca.

Migracje w Entity Framework to skrypty które tworzą tabele na podstawie naszych encji. W swoim projekcie również zastosuję migracje, lecz na początek muszę stworzyć bazę a następnie uzupełnić mój kontekst, zaprezentowany we wcześniejszym wpisie, o informacje umożliwiające podłączenie się do tejże bazy.

Utworzenie bazy:

W Visual Studio otwieramy SQL Server Object Explorer → rozwijamy któryś z dostępnych serwerów → klikamy PPM na katalogu Databases → Add New Database → wybieramy nazwę bazy i lokalizację (jeżeli wybraliśmy localdb). W moim przypadku serwer bazy zwie się (localdb)\MSSQLLocalDb, a bazę nazwałem WPMDatabase. Teraz można w prosty sposób uzyskać connection stringa do bazy: PPM na naszej nowej bazie → Properties → szukamy właściwości Connection string i kopiujemy na bok jej wartość. U mnie connection string ma postać:

Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=WPMDatabase;
Integrated Security=True;Connect Timeout=15;Encrypt=False;
TrustServerCertificate=False;ApplicationIntent=ReadWrite;
MultiSubnetFailover=False

Połączenie z bazą

Teraz musimy ten connection string umieścić gdzieś w projekcie. Najlepiej w katalogu Solution Items, w katalogu głównym solucji. Tworzymy tam nowy plik tekstowy config.json. Umieszczamy w w nim nasz connection string:

{
   "DataAccessMsSql": {
      "ConnectionString": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WPMDatabase;Integrated Security=True;Connect Timeout=15;Encrypt=False; TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"
    }
}

Następnie musimy powiedzieć klasie z kontekstem gdzie znajduje się plik z konfiguracją: w klasie MsSqlContext nadpisujemy metodę OnConfiguring. Teraz cała klasa wygląda tak:

    public class MsSqlContext : DbContext
    {
        public DbSet<WPMCredentials> GetAll { get; set; }
        
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
           var builder = new ConfigurationBuilder()
                .AddJsonFile("../../config.json")
                .AddEnvironmentVariables();
            var configuration = builder.Build();

            var sqlConnectionString = configuration["DataAccessMsSql:ConnectionString"];

            optionsBuilder.UseSqlServer(sqlConnectionString);
        }
    }

Co robi metoda OnConfiguring? Wg dokumentacji ta metoda zawiera ustawienia kontekstu i jest wywoływana jako ostatnia przy tworzeniu nowej instancji kontekstu. Umieszczone w niej konfiguracje mają najwyższy priorytet: niżej w hierarchii są ustawienia z konstruktora, a najniżej – ustawienia z metody AddDbContext (o tej metodzie będzie wzmianka w którymś z kolejnych wpisów). Ja tutaj dodaję instrukcje odczytu connection stringa z pliku config.json.
Kolejną czynnością potrzebną do włączenia migracji jest dodanie poniższych wpisów do pliku project.json:

{
    "dependencies": {
        "EntityFramework.Commands": "7.0.0-*"
    },
    "commands": {
        "ef": "EntityFramework.Commands"
    }
}

Pora na konsolę

Otwieramy Package Manager Console i przechodzimy do katalogu z projektem (używając standardowych poleceń powłoki tj. dir, cd..). Teraz wpisujemy polecenie dnu restore – te polecenie sprawdza zależności w projekcie i ściąga odpowiednie paczki (gdyby te polecenie nie zadziałało: The term 'dnu' is not recognized... spróbuj użyć wpierw polecenia dnvm upgrade).
W tej chwili powinny zostać pobrane odpowiednie paczki z nugeta. Aby ostatecznie sprawdzić czy wszystko jest w porządku należy wykonać komendę dnx ef. Powinien pojawić się tytułowy jednorożec:
dnxef
W kolejnym wpisie opiszę jak korzystać z migracji.

3 thoughts on “Migracje w EF Core – w poszukiwaniu jednorożca.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *