Mam zły stan z moim projektem ASP.Net MVC 5 przy użyciu Code-First Entity Framework. Nie obchodzi mnie utrata danych, po prostu chcę móc zacząć od nowa, odtworzyć bazę danych i zacząć korzystać z migracji Code-First.
Obecnie jestem w stanie, w którym każda próba aktualizacji bazy danych powoduje zgłoszenie wyjątku lub otrzymanie komunikatu o błędzie. Witryna nie może również uzyskać prawidłowego dostępu do bazy danych. Jak mogę wyczyścić wszystkie migracje, ponownie utworzyć bazę danych i zacząć od zera bez konieczności tworzenia nowego projektu? Innymi słowy, chcę zachować mój kod, ale porzucić bazę danych.
Później będę chciał również zsynchronizować bazę danych wdrażania (SQL Server na platformie Azure). Ponownie, nie mam nic przeciwko porzuceniu wszystkich danych - chcę tylko, aby działały.
Podaj wszelkie instrukcje umożliwiające przywrócenie czystości. Bardzo cenione.
źródło
DROP DATABASE
...Odpowiedzi:
Wykonaj poniższe kroki:
1) Najpierw przejdź do Eksploratora serwera w programie Visual Studio, sprawdź, czy połączenia danych „.mdf” dla tego projektu są połączone. Jeśli tak, kliknij prawym przyciskiem myszy i usuń.
2) Przejdź do Eksploratora rozwiązań, kliknij ikonę Pokaż wszystkie pliki.
3) Przejdź do App_Data, kliknij prawym przyciskiem myszy i usuń wszystkie pliki „.mdf” dla tego projektu.
4) Usuń folder migracji, klikając prawym przyciskiem myszy i usuń.
5) Przejdź do SQL Server Management Studio, upewnij się, że nie ma bazy danych dla tego projektu, w przeciwnym razie usuń ją.
6) Przejdź do konsoli Menedżera pakietów w programie Visual Studio i wpisz:
Enable-Migrations -Force
Add-Migration init
Update-Database
7) Uruchom aplikację
Uwaga: jeśli w kroku 6, część 3, pojawi się błąd „Nie można dołączyć pliku ...”, prawdopodobnie oznacza to, że pliki bazy danych nie zostały całkowicie usunięte w programie SQL Server.
źródło
Chciałbym dodać, że odpowiedź Lin jest poprawna.
Jeśli nieprawidłowo usuniesz MDF, będziesz musiał to naprawić. Do mocowania połączeń śrubowych w projekcie do płyty MDF. Krótka odpowiedź; odtworzyć i usunąć poprawnie.
update-database -force
[użyj siły, jeśli to konieczne]Gotowe, ciesz się nową bazą danych
UPDATE 11/12/14 - używam tego cały czas, kiedy dokonuję zrywającej zmiany db. Odkryłem, że to świetny sposób na przywrócenie migracji do oryginalnej bazy danych:
Uruchom normalną migrację, aby przywrócić bieżącą wersję
Update-Database -TargetMigration:0 -force
[Spowoduje to zniszczenie wszystkich tabel i wszystkich danych.]Update-Database -force
[w razie potrzeby użyj siły]źródło
To zadziałało dla mnie:
źródło
Chociaż podstawą tego pytania jest brak dbałości o dane, czasami utrzymanie danych jest niezbędne.
Jeśli tak, napisałem listę kroków, jak odzyskać z koszmaru Entity Framework, gdy baza danych ma już tabele o tej samej nazwie tutaj: Jak odzyskać z koszmaru Entity Framework - baza danych ma już tabele o tej samej nazwie
Najwyraźniej ... moderator uznał za stosowne usunąć mój post, więc wkleię go tutaj:
Jak odzyskać od koszmaru Entity Framework - baza danych ma już tabele o tej samej nazwie
Opis : Jeśli jesteś podobny do nas, gdy Twój zespół jest nowy w EF, skończysz w stanie, w którym albo nie możesz utworzyć nowej lokalnej bazy danych, albo nie możesz zastosować aktualizacji do swojej produkcyjnej bazy danych. Chcesz wrócić do czystego środowiska EF, a następnie trzymać się podstaw, ale nie możesz. Jeśli sprawisz, że będzie działać w środowisku produkcyjnym, nie możesz utworzyć lokalnej bazy danych, a jeśli zaczniesz działać lokalnie, serwer produkcyjny nie będzie zsynchronizowany. I wreszcie, nie chcesz usuwać żadnych danych serwera produkcyjnego.
Objaw : nie można uruchomić Update-Database, ponieważ próbuje uruchomić skrypt tworzenia, a baza danych zawiera już tabele o tej samej nazwie.
Tło problemu : EF rozumie, gdzie znajduje się bieżąca baza danych w porównaniu z miejscem, w którym znajduje się kod, na podstawie tabeli w bazie danych o nazwie dbo .__ MigrationHistory. Kiedy patrzy na skrypty migracji, próbuje ponownie porównać ze skryptami, gdzie było ostatnio. Jeśli nie może, po prostu próbuje zastosować je po kolei. Oznacza to, że wraca do początkowego skryptu tworzenia i jeśli spojrzysz na pierwszą część polecenia UP, będzie to CreeateTable dla tabeli, w której wystąpił błąd.
Aby lepiej to zrozumieć, polecam obejrzenie obu filmów wymienionych tutaj: https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Rozwiązanie : Musimy nakłonić EF do myślenia, że bieżąca baza danych jest aktualna, ale nie stosujemy tych poleceń CreateTable. Jednocześnie nadal chcemy, aby te polecenia istniały, abyśmy mogli tworzyć nowe lokalne bazy danych.
Krok 1: Oczyszczanie produkcyjnej bazy danych Najpierw wykonaj kopię zapasową produkcyjnej bazy danych. W programie SSMS kliknij prawym przyciskiem myszy bazę danych, wybierz „Zadania> Eksportuj aplikację warstwy danych ...” i postępuj zgodnie z wyświetlanymi instrukcjami. Otwórz produkcyjną bazę danych i usuń / upuść tabelę dbo .__ MigrationHistory.
Krok 2: Czyszczenie środowiska lokalnego Otwórz folder migracji i usuń go. Zakładam, że w razie potrzeby możesz odzyskać to wszystko z gita.
Krok 3: Ponownie utwórz początkowe W Menedżerze pakietów uruchom „Enable-Migrations” (EF wyświetli monit o użycie -ContextTypeName, jeśli masz wiele kontekstów). Uruchom „Add-Migration Initial -verbose”. Spowoduje to utworzenie początkowego skryptu do utworzenia bazy danych od podstaw na podstawie bieżącego kodu. Jeśli w poprzednim pliku Configuration.cs były jakieś operacje inicjujące, skopiuj je.
Krok 4: Trick EF W tym momencie, gdybyśmy uruchomili Update-Database , otrzymalibyśmy oryginalny błąd. Musimy więc oszukać EF, aby pomyślał, że jest aktualny, bez uruchamiania tych poleceń. Więc przejdź do metody Up w utworzonej migracji początkowej i skomentuj ją.
Krok 5: Aktualizacja bazy danych Bez kodu do wykonania w procesie Up, EF utworzy tabelę dbo .__ MigrationHistory z poprawnym wpisem, aby powiedzieć, że poprawnie uruchomił ten skrypt. Idź i sprawdź to, jeśli chcesz. Teraz odkomentuj ten kod i zapisz. Możesz ponownie uruchomić Update-Database, jeśli chcesz sprawdzić, czy EF uważa, że jest aktualny. Nie uruchomi kroku Up ze wszystkimi poleceniami CreateTable, ponieważ uważa, że już to zrobił.
Krok 6: Potwierdź, że EF jest AKTUALNIE aktualny Jeśli masz kod, do którego jeszcze nie zastosowano migracji, oto co zrobiłem ...
Uruchom „Add-Migration MissingMigrations” Spowoduje to utworzenie praktycznie pustego skryptu. Ponieważ kod już tam był, w rzeczywistości istniały poprawne polecenia do tworzenia tych tabel w początkowym skrypcie migracji, więc po prostu wyciąłem CreateTable i równoważne polecenia drop do metod Up i Down.
Teraz uruchom ponownie Update-Database i obserwuj, jak wykonuje nowy skrypt migracji, tworząc odpowiednie tabele w bazie danych.
Krok 7: Potwierdź ponownie i zatwierdź. Buduj, testuj, uruchamiaj. Upewnij się, że wszystko działa, a następnie zatwierdź zmiany.
Krok 8: Poinformuj resztę swojego zespołu, jak postępować. Kiedy następna osoba zaktualizuje się, EF nie będzie wiedział, co go uderzyło, biorąc pod uwagę, że skrypty, które uruchomił wcześniej, nie istnieją. Ale zakładając, że lokalne bazy danych można zdmuchnąć i ponownie utworzyć, wszystko jest w porządku. Będą musieli porzucić lokalną bazę danych i ponownie dodać opcję Utwórz ją z EF. Jeśli mieli lokalne zmiany i oczekujące migracje, zaleciłbym, aby ponownie utworzyli bazę danych na serwerze głównym, przełączyli się na gałąź funkcji i ponownie utworzyli skrypty migracji od podstaw.
źródło
Chcę tylko dodać do doskonałej odpowiedzi @Lin:
5) B. Jeśli nie masz programu SQL Management Studio, przejdź do „Eksploratora obiektów SQL Server”. Jeśli nie widzisz bazy danych projektu w localdb „SQL Server Object Explorer”, kliknij przycisk „Dodaj serwer SQL”, aby dodać go do listy ręcznie. Następnie możesz usunąć bazę danych z listy.
źródło
Możliwa bardzo prosta poprawka, która zadziałała dla mnie. Po usunięciu wszelkich odniesień do bazy danych i połączeń, które znajdziesz w eksploratorze server / serverobject, kliknij prawym przyciskiem myszy folder App_Data (nie pokazałem żadnych obiektów w aplikacji) i wybierz Otwórz. Po otwarciu umieść całą bazę danych / etc. pliki w folderze kopii zapasowej lub jeśli masz odwagę, po prostu je usuń. Uruchom aplikację i powinna odtworzyć wszystko od zera.
źródło
Moje rozwiązanie najlepiej nadaje się do :
- usunięcia pliku mdf
- chęci odtworzenia bazy danych.
Aby odtworzyć bazę danych , musisz dodać połączenie za pomocą programu Visual Studio.
Krok 1 : Przejdź do Eksploratora serwera i dodaj nowe połączenie (lub poszukaj ikony dodawania bazy danych).
Krok 2 : Zmień DataSource do Microsoft SQL Server Database File .
Krok 3 : dodaj dowolną nazwę bazy danych w polu Nazwa pliku bazy danych . (Najlepiej taką samą nazwę, jaką masz w atrybucie web.config AttachDbFilename )
Krok 4 : kliknij Przeglądaj i przejdź do miejsca, w którym chcesz, aby się znajdował.
Krok 5 : w poleceniu uruchamiania konsoli menedżera pakietów
update-database
źródło