Wygeneruj pełny skrypt SQL z migracji Code First w EF 5

145

Jak używać Entity Framework 5 Migracje Code First do tworzenia pełnego skryptu bazy danych ze stanu początkowego (pustego) do najnowszej migracji?

Post na blogu w witrynie MSDN Blog sugeruje, aby to zrobić, ale wydaje się, że tworzy pusty skrypt:

Update-Database -Script -SourceMigration: $InitialDatabase
Matt Wilson
źródło

Odpowiedzi:

286

Wygląda na to, że API się zmieniło (a przynajmniej nie działa dla mnie).

Uruchomienie następujących działań w konsoli Menedżera pakietów działa zgodnie z oczekiwaniami:

Update-Database -Script -SourceMigration:0
Matt Wilson
źródło
14
Zdaję sobie sprawę, że to poprawna odpowiedź, ale jak do licha odkryłeś, że 0 działa, gdy parametr jest zwykle ciągiem ?!
Dave R
27
Po prostu prób i błędów, naprawdę po wypróbowaniu wszystkiego, co przyszło mi do głowy, aby nakłonić go do działania :)
Matt Wilson
1
Czy to tworzy dokładną kopię bazy danych? Zawiera zawartość tabeli?
Multitut
2
@Multitut: nie, zrobi tylko strukturę.
Martin Clarke,
6
Tylko w przypadku, gdy ktoś patrzy, jak to zrobić w EfCore i skończyło się tutaj jak ja, polecenie to: dotnet ef migrations script. Więcej na temat dokumentacji: docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/ ...
Rafael Miceli
13

Dla każdego, kto używa core framework'a jednostki, który kończy się tutaj. Tak to się robi.

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

Za pomocą parametru -Fromi -Tomożna wygenerować skrypt aktualizacji w celu zaktualizowania bazy danych do określonej wersji.

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

Istnieje kilka opcji tego polecenia.

Od migracji powinna być ostatnia migracja stosowane do bazy danych przed uruchomieniem skryptu. Jeśli nie zastosowano żadnych migracji, określ 0(jest to ustawienie domyślne).

Do migracji jest ostatnia migracja które będą stosowane do bazy danych po uruchomieniu skryptu. Domyślnie jest to ostatnia migracja w projekcie.

Idempotent scenariusz może ewentualnie być wygenerowany. Ten skrypt stosuje migracje tylko wtedy, gdy nie zostały one jeszcze zastosowane w bazie danych. Jest to przydatne, jeśli nie wiesz dokładnie, jaka była ostatnia migracja zastosowana do bazy danych lub jeśli wdrażasz w wielu bazach danych, z których każda może znajdować się w innej migracji.

Justin Lessard
źródło
To działa do pewnego stopnia. Gdy zaczniesz zmieniać nazwy kolumn, zacznie generować błędy, utworzenie DacPaca jest lepszym rozwiązaniem. Zwłaszcza gdy zaczniesz używać Pipelines w CI / CD
Nick Turner
8

Aby dodać do odpowiedzi Matta Wilsona, miałem kilka klas encji z kodem, ale nie miałem bazy danych, ponieważ nie wykonałem kopii zapasowej. Więc wykonałem następujące czynności w moim projekcie Entity Framework:

Otwórz konsolę Menedżera pakietów w programie Visual Studio i wpisz następujące polecenie:

Enable-Migrations

Add-Migration

Nadaj migracji nazwę, na przykład „Początkowa”, a następnie utwórz migrację. Na koniec wpisz:

Update-Database

Update-Database -Script -SourceMigration:0

Ostatnie polecenie utworzy tabele bazy danych na podstawie klas jednostek (pod warunkiem, że klasy jednostek są dobrze uformowane).

Tahir Khalid
źródło