Entity Framework Code First – Zmiany w strukturze bazy danych – Migrations

By | March 24, 2016

Dziś będzie bardzo krótko i bardzo prosto, a jednak jeśli ktoś zdecyduje się na korzystanie z podejścia Code First w EF to informacje takie są absolutnie niezbędne.

Instalujemy paczki Entity Framework, dodajemy kilka encji do projektu, DbContext. Szybko przelatujemy wzrokiem przez tutorial i lecimy. Nasza baza stoi, ma się dobrze i wszystko działa, gra i trąbi. Jesteśmy z niej zadowoleni przez tydzień, drugi i kawałek trzeciego, gdy nagle…

“Dlaczego moja encja X nie ma właściwości Y? Przecież musi ją mieć!”. Oczywiście najprawdopodobniej nie zapomnimy dodać Name do klasy Person, ale możemy chcieć ustawić atrybuty, by zaprowadzić porządek w kolumnach tabel lub po prostu chcieć dodać nową kolumnę na nową, wspaniałą funkcjonalność. I oczywiście narzędzie takie jak EF daje taką możliwość.

To naprawdę prosty temat, a jednak niektórzy nie do końca wiedzą jak to zrobić i dlaczego właśnie w ten sposób. Być może temu, że nazwa Migrations kojarzy się na pierwszy rzut oka z przenoszeniem bazy niż z jej aktualizacją. Tak czy inaczej postanowiłem napisać jak przeprowadzić szybką i prostą aktualizację.

Zaczynamy od uruchomienia Package Manager Console w Visualu. Cały proces będziemy przeprowadzać właśnie z jego poziomu. Zaczynamy od uruchomienia migracji w swoim projekcie. Robimy to wpisując Enable-Migrations w konsoli. Jeśli trafimy na taki piękny błąd No context type was found in the assembly ‘xxx’ , to znaczy, że w swojej solucji mamy kilka oddzielnych projektów, a Package Manager Console jest ustawiony na inny, niż ten w którym znajduje się nasz DbContext. Zmieniamy, wklepujemy jeszcze raz i czekamy na utworzenie konfiguracji.

Przyjmijmy, że dokonaliśmy już jakichś zmian, które chcemy nanieść na naszą bazę. Dodajemy więc migrację komendą Add-Migration JakasNazwa ,każdą migrację wypadałoby nazwać jakąś stosunkowo krótką nazwą, która w kilku słowach opisze co dodaliśmy, usunęliśmy lub popsuliśmy. Po chwili oczekiwania nasza migracja będzie gotowa i będzie można ją nanieść na bazę.

Wpisujemy w Package Manager Console magiczne słowa Update-Database i gotowe, jesteśmy szczęśliwymi posiadaczami nowej kolumny/tabeli w bazie. W tym punkcie możemy zaszaleć i użyć kilku parametrów do komendy. Polecam korzystanie z Update-Database -Verbose , robi dokładnie to samo, ale w konsoli możemy obserwować co dokładnie leci do SQLa.

Drugim, przydatnym jeśli coś popsuliśmy, parametrem jest Update-Database –TargetMigration: NazwaJakiejsMigracji . Dzięki temu możemy cofnąć pewne zmiany do punktu poprzedniej migracji. Używając komendy Update-Database –TargetMigration: $InitialDatabase możemy cofnąć absolutnie wszystkie migracje jakie były kiedykolwiek wykonywane.

Oczywiście komend jest więcej, znacznie więcej. W linkach poniżej znajdziecie artykuł, który opisuje je dokładniej. Oprócz tego podlinkuję dwa posty osób, które również biorą udział w konkursie Daj Się Poznać 2016 i opowiadają o przydatnych podstawach korzystania z Entity Framework.

Linki