Wstęp do migracji w Entity Framework

Czym są migracje w Entity Framework? :
Podczas gdy piszemy w ORM’ie takim jak EF, często chcemy modyfikować strukturę bazy, nawet jeżeli przechowujemy już w niej jakieś dane. EF do tego celu udostępnia tzw. migracje. Są to aktualizacje struktury bazy, mające miejsce po wprowadzeniu zmian w klasach modelu, dzięki którym nie zawsze tracimy dane przechowywane w bazie.

Czy to znaczy, że korzystając z migracji nigdy nie tracimy danych? :
Chciałoby się rzec: Bez przesady! :). Migracje dzielą się na stratne i bezstratne. Stratne to takie, podczas których nie ma szans by zachować poprzednie dane. Najprostszym przykładem będzie tutaj np. zmiana typu danych kolumny. Migracje bezstratne pozwalają natomiast na zachowanie danych, i z nich korzystamy (w sposób całkowicie automatyczny :)) wówczas, gdy np. dodajemy do bazy nową tabelę (a ściślej klasę z modelem tej tabeli).

Migracje mają jeszcze jedną poważną zaletę:
Każda zmiana (grupa zmian), zostaje zapamiętana/zapisana, w postaci kodu. Jeżeli w środę dodamy do naszej bazy pięć tabel, w czwartek stwierdzimy, że dwie z nich są zbędne i je usuniemy, a w piątek się zreflektujemy i przytomnie przyznamy, że bez tych dwóch nie da się żyć, to (jeżeli nie usuniemy kodu migracji), będziemy mogli wrócić do zmian ze środy 😉

Migracje zostały dodane do EF, bodajże w wersji 4.3, i od tego czasu są integralną częścią przy podejściu Code First, tworzenia bazy. Co było wcześniej? Z pewnością Chaos…

How to… :
1. Na samym początku musimy oczywiście mieć pobraną paczkę z Entity Framework’iem. Polecam pobrać ją za pomocą NuGet‚a 🙂
2. Teraz należy zainstalować migracje. Aby to zrobić, wpisujemy w oknie Package Manager Console polecenie :

enable-migrations

Jeżeli mamy więcej niż jeden kontekst w aplikacji,rozszerzamy polecenie o jego nazwę w ten sposób:

enable-migrations -ContextTypeName nazwaKontekstu

W tej chwili mamy zainstalowane migracje. Gdy spojrzymy na Solution Explorer’a zobaczymy, że dla w projekcie dla ktrego instalowaliśmy migracje, został utworzony folder Migrations, w którym, póki co, znajduje się jeden plik Configuration.cs. Ów plik zawiera klasę o takiej samej nazwie. oprócz konstruktora zawiera jedną metodę: Seed(), która jest uruchamiana po każdej migracji bazy, lub przy pierwszym uruchomieniu aplikacji, i w której możemy, np w celach testowych, utworzyć zawartość naszej bazy, dzięki czemu nie będzie ona całkowicie pusta.

Teraz musimy dodać nasze klasy POCO (jeżeli jeszcze ich nie mamy), odzwierciedlające strukturę
naszej bazy danych. Jako przykład niech posłuży tu moja klasa dla tabeli z profilami użytkowników w projekcie HardTraining.

MigrationPoco


Teraz możemy wprowadzić zmiany na bazie. W tym celu:
1. Należy dodać migrację. By to zrobić korzystamy z polecenia(cały czas w Package Manager Console):

add-migration NazwaMigracji

Gdy powyższe polecenie zostanie wykonane do wcześniej wspomnianego folderu Migrations, zostanie dodany nowy plik składający się z dokładnej daty i czasu oraz nazwy migracji – na poniższym obrazku widzimy plik utworzony po kreacji migracji o nazwie First:
MigrationFiles

Plik ten zawiera dwie metody Up() i Down(). Jak nietrudno się domyślić, Up() jest używany podczas tworzenia obiektów bazy, a Down() podczas ich usuwania.

2. Jest to ostatni krok. Trzeba zmiany wprowadzić do bazy. Ostatnie polecenie to:

update-database

Na sam koniec pokażę, w jako sposób można cofnąć się do wybranej migracji. Znowu trzeba coś wpisać w Package Console Manager’a. Jest to:

update-database -TargetMigration:"NazwaMigracjiDoKtórejChcemyWrócić"

Proste, prawda? 🙂

Dodaj komentarz

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