2013-05-17 5 views
14

Po zmianie oddziały w kontroli źródła, bieganie Update Database cofnąć do poprzedniej migracji EF czasami wyświetla tekst „Przywracanie automatycznej migracji”, jak poniżej:Co oznacza "Przywracanie migracji automatycznej"?

Reverting automatic migration: 201305171619008_DescriptiveNameForMigration. 
Reverting code-based migration: 201305162023299_Init. 

Skąd Entity Framework ustalić, że migracja powinna przebiegać automatycznie i co robi inaczej?

Oto jak go odtworzyć, zakładając, że masz projekt z kodu pierwszego migracje już Setup:

  1. przełączenia się do nowego oddziału w kontroli źródła
  2. dokonać zmiany modelu mappers i dodaj migrację
  3. Update Database
  4. powrócić do domyślnego oddziału
  5. -TargetMigration Update Database: 0 -Force
  6. Zobacz "Przywracanie migracji automatycznej" w wynikach polecenia Aktualizacja-Baza danych

To jest to, o czym MYŚLĘ, proszę, popraw mnie, jeśli się mylę.

  • Update Database wylicza migracje w __MigrationHistory
  • znajdzie odpowiednie pliki migracji w projekcie i wywołuje (metoda
  • Jeśli odpowiadający plik migracji nie istnieje w dół), a następnie wykonuje to najlepiej -guess o tym, jak cofnąć migrację na podstawie migawce w __MigrationHistory
+0

Myślę, że opisałeś to ładnie. –

+0

Czy metoda "w dół" w kodzie powróciła z powrotem? Następnie miał ścieżkę do odzyskania wersji, która była w tabeli MigrationHistory. rodzaju zgodnie z oczekiwaniami, nie myślisz? –

+0

W porządku, jeśli plik kodu istnieje dla migracji, użyje metody Down(). Zastanawiam się, jak "przywracanie migracji automatycznej" działa, gdy plik kodu nie istnieje dla cofniętej migracji. (Być może jest to właściwe dla nowego pytania SO.) Ty też uważasz, że "przywrócenie migracji automatycznej" oznacza, że ​​generuje on metodę Down() w locie? –

Odpowiedz

3

Kiedy rusztowania migrację, Entity Framework wykona diff między ostatnim modelu zapisanego w __MigrationsHistory i obecnego modelu i stworzenia migrat klasa jonów zawierająca tę różnicę. Możesz edytować zarówno metody Up i Down tej migracji z rusztowaniem.

Automatyczne migracje pozwalają pominąć rusztowanie. Jeśli są włączone i wywołasz Update-Database, wykona różnicę bieżącego modelu i ostatniego modelu zarejestrowanego w __MigartionsHistory i zastosuje tę różnicę przy użyciu "automatycznej" migracji. Automatyczna migracja nadal pobiera rekord w __MigrationHistory, ale do Twojego projektu nie zostanie dodana klasa migracji. Kroki tego porównania są takie same, jak w przypadku metody Up, ale nigdy nie ma możliwości dostosowania.

Po przywróceniu jednej z tych automatycznych migracji wykonuje różnicę zarejestrowanego modelu i model poprzedniej migracji. Te kroki są takie same, jak w przypadku metody "rusztowania w dół".

Jeśli Entity Framework nie może znaleźć klasy migracji dla migracji, zakłada, że ​​jest to migracja automatyczna. Jeśli więc dostosujesz metodę Down, żadne z tych dostosowań nie zostaną zastosowane podczas cofania.

Mam nadzieję, że dzięki temu sprawy będą bardziej przejrzyste.

+0

Dobrze wiedzieć, że migracja automatyczna jest rejestrowana po wykryciu zmiany bez odpowiedniego pliku migracji. Jak dotąd zauważyłem tylko mieszankę wiadomości automatycznych i kodowych podczas wycofywania zmian. Dzięki za szczegóły. :) –