8

Używam EF 5.0 i chciałbym zacząć używać Code-based migrationsMigracje oparte na kodzie EntityFramework, jak ustalana jest kolejność?

Użyłem fluent migrator i istnieje pojęcie porządku migracji. Migracje można migrować/przywracać, niezależnie od wersji migracji bazy danych.

Czy Entity Framework ma podobną funkcjonalność?

I planuje utrzymanie wielu implementacji migracji dla każdej wersji bazy danych (prawdopodobnie związany wychodzą na pierwszy numer).

Dlaczego tego chcę?

Nasza ciągła integracja spowoduje migrację bazy danych dla każdego środowiska. Prawdopodobnie nasza kompilacja Dev będzie tylko jedną wersją "za", ale kiedy przejdziemy do środowiska QA lub PROD, baza danych pozostanie w tyle za wieloma migracjami.

Może mam zamiar o tym niewłaściwy sposób, w takim przypadku chciałbym usłyszeć opinie na temat najlepszego sposobu, aby zrobić migrację z CI.

Odpowiedz

9

Tak, funkcja EF ma tę funkcję.

Po uruchomieniu Add-Migration zauważysz plik migracji jest poprzedzony znacznikiem czasu. To określa kolejność, zakładając, że automatyczne migracje są i zawsze były wyłączone.

Jeśli używasz mieszanych jawnych migracji i automatycznych migracji, możesz zauważyć dodatkową właściwość Source w pliku .resx wygenerowaną podczas migracji. W ten sposób EF określi, czy musi przeprowadzić automatyczną migrację, zanim rozpocznie jawną migrację.

Moje doświadczenie nauczyło mnie poniższych wskazówek:

1) Nigdy nie używać automatycznych migracji.

2) Każdy programista w zespole powinien upewnić się, że ma najnowszy kod przed utworzeniem nowej jawnej migracji. Oczywiście, ale tworzenie migracji ze starego kodu spowoduje problemy.

3) Programiści powinni upewnić się, że jeśli piszą niestandardowy kod SQL w metodzie migracji Up(), to wpisują odpowiedni kod (i testują go!), Aby odwrócić te zmiany w metodzie Down().

+1

Dobre punkty, okrzyki. Powiedziałbym 2) nie jest oczywiste, dopóki nie uświadomisz sobie, że EF ma binarną reprezentację obecnego modelu ukrytego, co jest niemożliwe do scalenia/aktualizacji. (Zobacz także http://stackoverflow.com/a/10694348/10245) Tyle dla gałęzi funkcjonalnych: - / –