2013-03-30 5 views
49

Chcę wiedzieć, jak uruchomić polecenie "Aktualizuj bazę danych" dla produkcyjnej bazy danych.Najpierw kod struktury obiektu - jak uruchomić aktualizacyjną bazę danych dla produkcyjnej bazy danych

Baza danych "Aktualizacja bazy danych" działa dobrze z mojego komputera lokalnego, ale jak mogę to zrobić do danych produkcyjnych?

Tak więc, jeśli dokonam zmiany w mojej aplikacji, a następnie uruchomę "publikowanie" w Visual Studio, to działa dobrze dla kodu strony, ale jak uruchomić polecenie "Aktualizuj bazę danych" dla danych produkcyjnych .

Nadzieja to pytanie ma sens ...

Dzięki

+1

Możliwy duplikat [Using Entity Framework (kod pierwszy) migracje w produkcji] (http://stackoverflow.com/questions/10848746/using-entity-framework-code -pierwsze migracje-w-produkcji) –

Odpowiedz

16

Aby dodać co powiedział już @David ...

Osobiście nie ufam automatic updates w scenariuszach „na żywo”, a ja zawsze wolę ręczna administracja bazą danych (tzn. jest problem z permissions potrzebnym do utworzenia lub zmiany Db - nie wspominając o współdzielonym hostingu itp.) - ale z tego, co widziałem, migracje są dość solidne, jeśli chodzi o synchronizację (w rzeczywistości, jedyny sposób aby je "rozwiązać" normalnie, należy usunąć Db i wymusić pełną/świeżą aktualizację).

Oto post, który napisałem jakiś czas temu o tym, jak script i synchronize database/code i nastawiony na scenariusze wdrażania (i kiedy pojawiają się problemy). To nie dotyczy ciebie (jeszcze), ale coś, o czym musisz pamiętać.

MVC3 and Code First Migrations - "model backing the 'blah' context has changed since the database was created"

+0

Dlaczego tak skomplikowane? Co jest złego w po prostu uruchomieniu kodu migracji automatycznie po uruchomieniu aplikacji/używa kontekstu po raz pierwszy? W jaki sposób skrypt SQL jest lepszy niż wywołanie metody C#? –

+1

@FlorianWinter prawda w idealnych warunkach i stosunkowo prostych scenariuszach, a jeśli wiesz, co robisz (na przykład tabela administrowania i migracji db). Ale wcześniej, niż później, natrafisz na pewne problemy, znika synchronizacja itp. I masz tam dane na żywo, których nie można dotknąć za wszelką cenę. Naprawdę nie ufam migracjom ani inicjatorom, którzy wykonują tę pracę dla mnie. A to wynika z niezliczonych problemów, które widziałem przez lata. Więc kiedy mam dane na żywo, lubię mieć pełną kontrolę. Mogę pozwolić aplikacji działać i "migrować samą siebie", ale dopiero po ponownym sprawdzeniu. I skalowanie itp. – NSGaga

+0

Punkt wzięty i zgadzam się. Dodam ostrzeżenie i połączę twoją odpowiedź z moją odpowiedzią, ale zostawię ją tam, ponieważ istnieją te proste scenariusze. Przynajmniej chwilowo ... –

26

Zobacz Using Entity Framework (code first) migrations in production tak, że aplikacja automatycznie aktualizuje bazę danych, gdy Entity Framework inicjuje.

Teraz, jeśli czujesz się lepiej mając ręczną kontrolę nad migracją, możesz użyć argumentu -Script do polecenia Aktualizuj-Bazę danych na swoim komputerze programisty, aby wygenerować skrypty SQL, które możesz następnie uruchomić na bazie produkcyjnej bazy danych.

http://msdn.microsoft.com/en-us/data/jj591621.aspx (patrz rozdział Pierwsze skryptów SQL)

4

Czy po prostu chcesz automatycznie aktualizacji bazy danych do najnowszej wersji, kiedy i gdzie kiedykolwiek twoje działa aplikacja (rozwój i produkcja)?

To może nie być dobry pomysł, z wyjątkiem bardzo prostych scenariuszy, w których wiesz, że możesz zaufać automatycznej migracji i ręczna migracja bazy danych jest niemożliwa. Zobacz tę odpowiedź: https://stackoverflow.com/a/15718190/2279059. Jeśli zignorujesz to ostrzeżenie, czytaj dalej.

Dodaj poniższe linie do web.config:

<entityFramework> 
<contexts> 
    <context type="MyAssembly.MyContext, MyAssembly" disableDatabaseInitialization="false"> 
    <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[MyAssembly.MyContext, MyAssembly], [MyAssembly.Migrations.Configuration, MyAssembly]], EntityFramework" /> 
    </context> 
</contexts> 

Może to wyglądać groźnie, ale ma w zasadzie taki sam jak następujący kod:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration>()); 

Jeśli nie masz szczęścia z web.config, wtedy może również spróbować umieścić ten kod w Global.asax. Osobiście preferuję konfigurację poprzez kod.

Jeśli chcesz, aby Twój plik konfiguracyjny wyglądać czystsze, można również czerpać nową klasę z szablonu MigrateDatabaseToLatestVersion klasy, dzięki czemu nie trzeba używać składni tajemniczy przekazywania argumentów typu w pliku web.cofig:

public class MyDatabaseInitializer : public MigrateDatabaseToLatestVersion<MyContext, Migrations.Configuration> {} 

Co to jest ustawienie inicjalizatora bazy danych, który automatycznie aktualizuje bazę danych do najnowszej wersji.

(Źródło i więcej informacji: http://www.ralphlavelle.net/2012/09/entity-framework-code-first-webconfig.html)

Powiązane problemy