Ostatnio programuję z Entity Framework 4.1 Code First i uwielbiam go do programowania, ale mając tylko plan końcowy i szybko zmieniającą się listę funkcji, ciągle modyfikuję klasę / bazę danych, aby spełnić potrzeby aplikacji.
W fazie rozwoju nie ma danych na żywo i mogę z łatwością usunąć całą bazę danych, więc jest ona odtwarzana przy użyciu nowego schematu, ale oczywiście, kiedy jest na żywo - to bardzo źle!
Jedyne rozwiązania, które widzę, to upuszczenie tabeli metadanych i ręczne zsynchronizowanie bazy danych lub po prostu usunięcie i ponowne uruchomienie.
Osobiście wolę pierwszą metodę, ponieważ myślę, że o wiele łatwiej będzie dodać kolumnę / tabelę niż odtworzyć i migrować dane, ale, chyba że coś przeoczyłem, całkowicie odchodzi od Code First.
Tak naprawdę pytanie brzmi: czy Code First dotyczy tylko początkowego rozwoju i jaka jest dobra strategia zarządzania EF dla środowiska produkcyjnego?
źródło
Odpowiedzi:
Moim zdaniem automatyczne tworzenie baz danych najpierw służy wyłącznie do programowania. Odpowiedziałem na podobne pytania dotyczące przepełnienia stosu, w którym opisałem zarówno sposób aktualizacji bazy danych, jak i dlaczego automatyczna funkcjonalność jest zła w produkcji:
Aktualizacja bazy danych jest zadaniem półautomatycznym. Nie powinna istnieć automatyczna niesprawdzona magia - ponadto EF 4.1 obecnie nie ma takiej magii (jest tylko prezentacja na temat funkcji, nad którymi pracuje zespół ADO.NET).
Możesz również sprawdzić to pytanie, aby lepiej zrozumieć, w jaki sposób strony internetowe są aktualizowane.
źródło
Obsługuj skrypty aktualizacji .
W samej bazie danych utrzymuj tabelę, w której przechowywany jest rekord z wersją schematu.
Po uruchomieniu aplikacja wykrywa wersję w stosunku do wersji, która ma być używana przez pliki binarne. Jeśli się różni, wykonuje (lub prosi użytkownika) skrypty aktualizacji.
Nie zapomnij najpierw wykonać kopii zapasowej bazy danych.
źródło
Pytanie jest w jakiś sposób błędne, ponieważ tworzy połączenia między modelem programowania a środowiskiem wykonawczym, w którym ich nie ma.
Najpierw kod jest przede wszystkim sterownikiem programistycznym i nie jest tak naprawdę podłączony do systemu wykonawczego.
W środowisku produkcyjnym poprawnie skonfigurujesz ustawienie, które zabrania środowisku wykonawczemu możliwości usuwania / aktualizacji modelu db.
źródło