8

Mam problem, na który nie mogłem znaleźć odpowiedzi przez Internet.EF 4.3 Migracja - jak stworzyć skrypt obniżający poziom zaawansowania?

Używam Migracji CodeFirst EF 4.3.1 z MsSQL.

Dodałem kilka migracji, a teraz chcę utworzyć skrypt do uaktualnienia/obniżenia wersji między dwiema migracjami.

do aktualizacji uruchomić następujące polecenie, które z powodzeniem odtwarza skrypt upgrade:

PM> Update-Database -Script -SourceMigration:"201205161144187_AddPostAbstract" -TargetMigration:"201205161203310_BlogLimitsAndTableRename" 

Jednakże dla obniżenia uruchomić następujące polecenie, które nie powiedzie się z powodu następującego błędu:

PM> Update-Database -Script -SourceMigration:"201205161203310_BlogLimitsAndTableRename" -TargetMigration:"201205161144187_AddPostAbstract" 
Scripting the downgrade between two specified migrations is not supported. 

jakieś pomysły jak mogę wygenerować skrypt obniżania wersji?

Dzięki.

Odpowiedz

10

Wygląda na to, że interfejs API do migracji oczekuje, że chcesz dokonać zmiany wersji tylko z "ostatniej wersji".

Jeśli BlogLimitsAndTableRename jest twoja najnowsza migracja (ostatni Stosowanej) można po prostu uruchomić:

Update-Database -Script -TargetMigration:"201205161144187_AddPostAbstract" 

Jeśli to nie jest twoja ostatnia migracja trzeba przywrócić bazę danych rozwojowej do niego pierwszy:

Update-Database -TargetMigration:"201205161203310_BlogLimitsAndTableRename" 

i teraz powinieneś być w stanie użyć pierwszego polecenia, aby uzyskać skrypt.

+0

Ma to sens. Wyobraź sobie, że masz bazę danych w stanie 5, a spróbujesz uzyskać skrypt, który zostanie obniżony z 4 na 3. Wtedy baza danych może być łatwo uszkodzona. Albo wskazywanie go na db naprawdę w stanie 4, albo na lokalnie popchniętym do stanu 4, powoduje, że myślisz o tym przed wprowadzeniem nieodwracalnego bałaganu. OTOH może być obsługiwany przez przełącznik -Force lub duże czerwone ostrzeżenie. :) –

+1

Myślałem o posiadaniu bazy danych w stanie 5, a teraz otrzymam skrypt do obniżenia go z 5 na 2. Migracja EF zmusza mnie do obniżenia wersji z 5 na 4, a następnie do obniżenia z 4 do 3, a następnie z 3 do 2, podczas gdy wszystko, co chcę, to stworzyć pojedynczy skrypt, który będzie już zawierał wszystkie te downgrade'y bez potrzeby ich wykonywania. (W przypadku aktualizacji można na przykład mieć bazę danych w stanie 5 i utworzyć skrypt aktualizacji z 2 na 5). – mayash

+0

Lub możesz mieć bazę danych w stanie 5 i utworzyć skrypt aktualizacji od 2 do 4. – mayash

Powiązane problemy