Mam model jednostki z pierwszym kodem w EF5. Ale chcę ręcznie zarządzać zmianami bazy danych - nie chcę, aby EF modyfikował moją istniejącą bazę danych i wszystkie jej dane. Ale kiedy wprowadzam równoległe zmiany w mapowaniu EF iw bazie danych, EF odmawia prawidłowego działania, informując mnie, że muszę najpierw użyć migracji kodu. Jak to wyłączyć?
entity-framework
migration
code-first
Stan Hargrove
źródło
źródło
Odpowiedzi:
ustaw Database.SetInitializer na null.
public class DatabaseContext: DbContext { //the base accepts the name of the connection string provided in the web.config as a parameter public DatabaseContext() : base("DatabaseContext") { //disable initializer Database.SetInitializer<DatabaseContext>(null); }
źródło
__MigrationHistory
nie masz najnowszej migracji, a nie chcesz zrobić to mimo wszystko. W moim przypadku korzystam z migracji w środowisku deweloperskim, ale kiedy wdrażam do produkcji, używam SSDT do aktualizacji bazy danych. Dlatego EF narzekałby, że model się zmienił, ponieważ__MigrationHistory
nie miałby najnowszej migracji, ale mogę zagwarantować, że baza danych jest zaktualizowana.Database.SetInitializer
z konstruktora do konstruktora klasy. Dzięki temu połączenie zostanie wykonane tylko raz.Więc najbardziej kompletna odpowiedź, jaką znalazłem, jest taka:
Migrations
folder wewnątrz projektu.Database.SetInitializer<DatabaseContext>(null);
wewnątrz inicjatora DatabaseContext.__MigrationHistory
z bazy danych. W EF6 + tabela znajduje się pod,Tables
ale we wcześniejszych wersjach znajduje się podSystem Tables
.źródło
__MigrationHistory
każdym razem, gdy moja aplikacja jest uruchamiana, co powoduje wydłużenie czasu uruchamiania mojej aplikacji o kilka milisekund. Czy istnieje sposób na__MigrationHistory
całkowite wyłączenie kontroli?Jeśli chcesz całkowicie wyłączyć migracje:
https://stackoverflow.com/a/9709407/141172
Jednak uważam, że lepiej jest pozostawić włączone migracje kodu w pierwszej kolejności, ale użyj
-Script
opcji, aby EF utworzył dla mnie skrypt zmiany bazy danych, który mogę zastosować do każdej bazy danych (programowanie, kontrola jakości, produkcja) ręcznie:Update-Database -Script -ProjectName MyProject -StartupProjectName MyProject
W ten sposób EF utworzy dla mnie skrypt zmiany, a ja nadal mam pełną kontrolę nad wprowadzanymi zmianami. Wersjonuję skrypty zmian jak każdy inny kod źródłowy.
źródło
completely turn off migrations
. Aby to zrobić: dodajDatabase.SetInitializer<YourContextType>(null)
do uruchomienia swojej aplikacjiJeśli korzystałeś już z migracji, zmiana tylko inicjatora nie pomoże. Musisz przejść do Management Studio, otworzyć tabele bazy danych, przejść do
System Tables
folderu i usunąć__MigrationHistory
znajdującą się tam tabelę (w przypadku EF6 i nowszych znajduje się ona bezpośrednio podTables
). Spowoduje to wyłączenie migracji na dobre.źródło
System Tables
.sp_rename
. Wyłączyłem też inicjator.Właśnie rozwiązałem ten „problem” przez
Konfiguracja mojego środowiska jest następująca
1. Visual Studio 2017 15.8.2 2. ASP NET MVC project 3. .NET Framework 4.6.1 4. Entity Framework 6.2.0
źródło
_MigrationHistory
automatycznie utworzy nową tabelę?