2012-02-25 8 views
32

Udało mi się uruchomić Code First i działa świetnie.Kod Pierwsza migracja za pomocą ciągów połączenia

Ponieważ wciąż rozwijam aplikację, struktura Bazy Danych nie jest sfinalizowana i dlatego muszę przeprowadzić migrację.

Połączyłem się z Official Blog Post i uruchomiłem polecenie aktualizacji bazy danych.

To jednak aktualizuje tylko wersję bazy danych SQLExpress. Wersja produkcyjna bazy danych znajduje się na platformie Azure, a ja określam ciąg połączenia w czasie wykonywania, więc komenda Aktualizacja-baza danych na tym nie działa.

Moje ostatnie pytanie brzmi: w jaki sposób zastosować automatyczne migracje do produkcyjnej bazy danych, której ciąg połączenia jest określony w środowisku wykonawczym?

+0

Dla osób sprawdzających za pomocą NO app.config i nie korzystających z konsoli PM, zobacz ten post http://stackoverflow.com/questions/15504465/entityframework-code-first-custom-connection-string-and-migrations/16133150# 16133150 –

Odpowiedz

49

Na opakowaniu typu konsoli kierownik:

Get-Help Update-Database

odpowiedniej części:

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com 
monParameters>] 

Więc można zrobić Update-Database -ConnectionStringName "MyConnectionString" i powinno działać jak czar.

Masz również inicjator bazy danych MigrateDatabaseToLatestVersion, jeśli go ustawisz (przez Dabase.SetInitializer()), gdy wdrożysz swoją aplikację do produkcji z właściwym ciągiem połączenia, na poziomie dostępu do bazy danych frist powinna automatycznie migrować twój db do najnowszej wersji.

Proponuję jednak zachować ostrożność, zawsze składuj kopie zapasowe.

Aktualizacja

@Alexy Strakh Ostatnie komentarze zrodził kolejny argument wart oddanie odpowiedź.

Prawidłowe skonfigurowanie systemu wdrażania za pomocą Code First Migrations, z podaniem 2 ConnectionString s.

  1. Definiowanie ciągów połączenia w pliku web.config (prod i dev), z domyślnymi hasłami
  2. Czy system konfiguracja aplikacji wiedzieć o konfiguracji połączeń dev prod i ewentualnie zbudować testów jednostkowych w celu zapewnienia słuszna jest odbierany *
  3. Zatrudniamy config file transformation i mieć go przekształcić web.config do jednej z wartości produkcji
  4. wdrożyć pakiet do produkcji (this should be the most cutting edge way)

Nie powinno się wchodzić w interakcję ze środowiskiem produkcyjnym z poziomu skrzynki rozwojowej, ale jeśli użytkownik musi to zrobić, musi to być tymczasowe rozwiązanie, które musi zostać przywrócone, gdy tylko skończysz.

Inną opcją jest po prostu użycie Web.Debug.config i Web.Release.config i mieć centralny szablon dla głównego pliku web.config (który byłby jedynym, który zostanie sprawdzony w kontrolerze źródłowej).

Upewnij się, że nigdy nie sprawdzasz haseł związanych z produkcją lub rozwojem osobistym (jeśli są one dostępne tylko pod numerem ).

* Możesz użyć symbolu DEBUG, aby sprawdzić, w jaki sposób działa aplikacja.

+0

Mam bazę danych dev określone w moim domyślne połączenie web.config i prod db określone w web.release.config. Chcę użyć prod zamiast dev, czy mogę to zrobić? –

+0

Tak, za wszelką cenę, ale pamiętaj, że to NIE jest framework encji (ani żadna technika pamięci masowej) odpowiedzialność za bycie świadomym swojej logiki konfiguracji dla dev/inscenizacja/produkcja. Myślę, że potrzebna jest transformacja plików konfiguracyjnych. https://msdn.microsoft.com/en-us/library/dd465318%28v=vs.100%29.aspx – WDRust

+0

To znaczy, zakładając, że chcesz iść tą drogą. Jeśli masz dodatkowe szczegóły lub wymagania, powinieneś zadać kolejne pytanie (proszę o pingowanie mnie). – WDRust