Migawka modelu bazy danych jest zapisywana wraz z każdą migracją w pliku .resx. Po dodaniu nowej migracji EF porównuje bieżący model bazy danych (wygenerowany na podstawie klas i ustawień modelu z DbModelBuilder) z ostatnią migracją i określa zmiany między nimi.
Opisywany problem może wystąpić, jeśli migracja nie jest zsynchronizowana. Zdarza się to, jeśli dwaj deweloperzy wykonają dwie niezależne migracje, a te migracje zostaną później połączone z domyślną gałęzią.
przykład:
Twórca 1
migracji AddColumnA
Twórca 2
migracji AddColumnB
wersja Scalony
Migracja AddColumnA - migawka bazy danych zawiera Columna
Migracja AddColumnB - migawka bazy danych zawiera columnB ale nie Columna
Jeśli dodać kolejną migrację, zmiany są ustalane przed migracją AddColumnB, nie zawiera informacji o kolumnie A. Rozwiązaniem tego problemu jest generowanie migracji manekinowej (z pustymi metodami Up i Down), aby uzyskać poprawną migawkę modelu bazy danych podczas ostatniej migracji.
wersja Połączony
Migracja AddColumnA - migawka bazy danych zawiera Columna
Migracja AddColumnB - migawka bazy danych zawiera columnB ale nie Columna
Migracja Dummy - migawka bazy danych z kręgosłupa i columnB
Bardzo ciekawy. Czy istnieje sposób, aby zapobiec tworzeniu migracji na podstawie tego pliku zasobów, aby baza danych była używana jako odniesienie? Jest to poważna wada migracji, moim zdaniem, ponieważ naprawdę chcę mieć pliki migracji EXPLICIT zamiast tylko automatycznej migracji, ale nie chcę mieć wielu fałszywych plików migracyjnych podczas pracy z wieloma programistami w tej samej bazie kodu. –
IMHO nie ma sposobu, aby określić bazę danych jako odniesienie.Zamiast tworzyć sztuczną migrację, można przeprowadzić aktualizację do pierwszej migracji (AddColumnA), a następnie ponownie wygenerować drugą migrację. Metody "w górę" i "w dół" pozostaną takie same, ale migawka bazy danych zostanie zaktualizowana do odpowiedniej wersji, a migracja typu "dummy" nie będzie konieczna. –
Dzięki za wszystkie informacje, ale przełączanie między wersjami dla każdego scalania jest o wiele bardziej kłopotliwe niż posiadanie "brzydkich"/pustych plików migracyjnych. Przynajmniej jeśli wykonasz jeden lub więcej scaleń każdego dnia. –