Pytanie w sprawie ef-migrations, entity-framework – Jak korzystać z migracji na istniejącej bazie danych w produkcji utworzonej przy użyciu Entity Framework 4.1?

12

Mam system w produkcji, który został stworzony z Entity Framework 4.1 Code First. Teraz zaktualizowałem do wersji 4.3 i muszę zastosować migracje, ale jest kilka przypadków użycia, które muszę omówić:

Nowy programista potrzebuje bazy danych utworzonej od podstaw z danymi początkowymi. (TheSeed() metoda stosuje również niektóre unikalne indeksy.)Środowisko produkcyjne wymaga tylko zastosowanych zmian. (Należy jednak pamiętać, że ten DB został utworzony w EF 4.1, który nie ma migracji).

Jak utworzyć migracje i inicjator (lub inicjatory), aby objąć oba te przypadki?

Twoja odpowiedź

1   odpowiedź
27

F 4.1, musisz wykonać trochę pracy, aby była gotowa do użyciaMigracje. Zacznij od kopii bieżącego kodu produkcyjnego uruchomionego w środowisku.Upewnij się, że baza danych dev nie istnieje.

Uaktualnij projekt, aby używać EF 4.3 (lub nowszego) z Migracjami i stwórz początkową migrację, aby zrobić migawkę, jak wygląda obecnie produkcja.

Update-Package EntityFramework
Enable-Migrations
Add-Migration InitialCreate  

Zastąp inicjalizatory bazy danych odpowiednim kodem Migrations.

Aby uzyskać dane początkowe, dodaj je doSeed() metodaMigrations\Configuration.cs plik. Zauważ, że w przeciwieństwie doSeed() metoda w inicjalizatorach, ta metoda jest uruchamiana za każdym razemUpdate-Database jest nazywany. Może być konieczne zaktualizowanie wierszy (zresetowanie danych początkowych) zamiast ich wstawiania. TheAddOrUpdate() metoda może w tym pomóc.

Ponieważ Twoje unikalne nieprzyzwoitości można teraz tworzyć za pomocą Migracji, powinieneś dodać je doUp() metoda migracji InitialCreate. Możesz je odłączyćCreateTable() połączenia za pomocąIndex() lub wywołującCreateIndex() metoda.

Możesz użyćMigrateDatabaseToLatestVersion inicjator teraz, aby uruchomić migracje podczas inicjalizacji.

Uzyskaj skrypt do uruchomienia środowiska produkcyjnego.

Update-Database -Script

Ze skryptu, który zostanie wygenerowany, będziesz chciał usunąć prawie wszystko, ponieważ istnieją tabele. Potrzebne ci części toCREATE TABLE [__MigrationHistory] iINSERT INTO [__MigrationHistory] sprawozdania.

Opcjonalnie upuśćEdmMetadata tabela, ponieważ nie jest już potrzebna.

Kiedy już to zrobisz, powinieneś być dobry w Migracjach. Nowi programiści mogą działaćUpdate-Database aby utworzyć bazę danych od podstaw, i możesz uruchomićUpdate-Database (lub użyj inicjatora Migrations) przeciwko produkcji, aby zastosować dodatkowe migracje.

Jeszcze jedno pytanie - czy to oznacza, że ​​sami będziemy musieli pisać migracje, aby przenieść bazę danych z niczego do obecnego stanu produkcji? InitialCreate jest pusty, gdy go wygenerujemy. Josh Kodroff
Większość z nich jest nadal prawdziwa w EF 5.0.0. Aby przekonwertować z automatycznych migracji na migracje jawne, musiałem wykonać większość tych kroków. Albert Bori
Jeśli jest pusta, baza danych już istniała, gdy uruchomiłeśAdd-Migration. Aby poprawnie wprowadzić rusztowanie, wskaż bazę danych, która nie istnieje. na przykładAdd-Migration InitialCreate -ConnectionString 'Data Source=.\SQLEXPRESS;Initial Catalog=DummyDatabase;Integrated Security=True' -ConnectionProviderName System.Data.SqlClient bricelam
To jest świetne! Dzięki wielkie! Josh Kodroff

Powiązane pytania