1. Wywołanie własnego SQLa
Pierwszym problemem którym się zajmiemy jest wywołanie własnego SQLa. Zdarza się często, iż dodajemy pole i jego wartość jest zależna od innego pola. Jeżeli w bazie do tej porty nie było żadnych rekordów sprawa jest prosta, w przypadku gdy już były dane chcielibyśmy zapewne aby ta specyficzna wartość po dodaniu nowej kolumny, dla istniejących już rekordów została obliczona. Dla celów testowych dodamy abstrakcyjne pole do klasy CompanyCar - MarkYear:
Code:
W polu tym będziemy chcieli umieścić informacje o Marce samochodu i jego roczniku. Generujemy więc tak jak to już pokazywałem migrację:
Code:
Teraz czas na dodanie naszego SQLa. RObimy to za pomocą funkcji Sql:
Code:
Jak widać prosta i banalna sprawa.
2. Migracja do danej wersji
Czasami mamy ochotę na migrację do specyficznej wersji, bądź też migracja w dół czyli przywrócenie poprzedniego stanu (schematu) bazy danych.Jeżeli chcielibyśmy wrócić stan naszej bazy do żadnego punktu wystarczy użyć komendy:
Update-Database –TargetMigration:"nazwa_migracji"
Migracja spowoduje cofnięcie zmian aż do migracji nazwa_migracji.Jeżeli chcielibyśmy wrócić do stanu początkowego bazy, wystarczy użyć polecenia:
Update-Database –TargetMigration:$InitialDatabase
3. Generowanie skryptu SQL
Pomimo tego iż wszyscy deweloperzy mogą wprowadzić zmiany po zakomitowaniu naszego kodu do SVN-a poprzez proste wywołanie komendy uaktualniającej bazę danych, istnieje czasami potrzeba wygenerowania pliku SQL zawierającego dokonywane modyfikacje.Aby utworzyć skrypt stosuje się następujące polecenie:
Update-Database -Script -SourceMigration:"Od" -TargetMigration:"Do"
gdzie:- Od - oznacza od jakiej migracji mają zostać pobrane zmiany
- Do - oznacza do której migracji ma skrypt dotyczyć
Biorąc przykładowy projekt, który tworzyłem przez ostatnie posty, możemy stworzyć skrypt, który obejmie zmiany od stanu początkowego bazy danych aż do migracji o nazwie AddSalesRepresentativeToPerson_CompanyCarEntity
Wprowadzamy więc polecenie:
PM> Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration AddSalesRepresentativeToPerson_CompanyCarEntity
Po zakończeniu procesu zostanie wyświetlony skrypt SQL:
Tak oto zakończył się temat migracji w EF.
Kolejny post będzie dotyczył Fluent API oraz adnotacją.
Dzięki za opisanie Code First Migrations.
OdpowiedzUsuńCzy wiesz w jaki sposób uruchomić Update-Database z kodu aplikacji?
Odpowiedź na pytanie: http://patryknet.blogspot.com/2012/03/ef-code-migrations-uruchomienie-z-kodu.html
UsuńSzczerze mówiąc nie próbowałem. Postaram się zbadać sprawę i zamieszczę rezultaty.
OdpowiedzUsuńZnalazłem rozwiązanie:
OdpowiedzUsuńhttp://pastebin.com/NT3app8G
na podst:
http://weblogs.asp.net/fredriknormen/archive/2012/02/15/using-entity-framework-4-3-database-migration-for-any-project.aspx