Jak odtworzyć bazę danych dla Entity Framework?

I Have into a bad state with my ASP.Net projekt MVC 5, wykorzystujący Framework Code-First Entity. Nie zależy mi na utracie danych, chcę tylko móc zacząć od nowa, odtworzyć bazę danych i zacząć korzystać z pierwszych migracji kodu.

Obecnie jestem w stanie, w którym każda próba aktualizacji bazy danych powoduje wyrzucenie wyjątku lub wyświetlenie komunikatu o błędzie. Również strona internetowa nie może poprawnie uzyskać dostępu do bazy danych. Jak wyczyścić wszystkie migracje, utworzyć ponownie bazę danych i rozpocząć od podstaw 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 wdrożenia (SQL Server na Azure). Ponownie, nie mam nic przeciwko porzuceniu wszystkich danych - chcę tylko, aby to działało.

Proszę podać wszelkie instrukcje, aby powrócić do stanu czystego. Doceniam to.

Author: Toby Sharp, 2013-11-30

7 answers

Wykonaj poniższe kroki:

1) Najpierw przejdź do Server Explorer w Visual Studio, sprawdź czy".mdf " połączenia danych 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ń wszystko".mdf " pliki dla tego projektu.

4) Usuń folder migracji kliknięciem prawym przyciskiem myszy i usuń.

5) przejdź do SQL Server Management Studio, upewnij się, że DB dla tego projektu jest nie ma go, w przeciwnym razie usuń.

6) przejdź do konsoli Menedżera pakietów w Visual Studio i wpisz:

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. Update-Database

7) Uruchom aplikację

Uwaga: w kroku 6 część 3, Jeśli pojawi się błąd "nie można dołączyć pliku...", prawdopodobnie dlatego, że nie usunąłeś całkowicie plików bazy danych w SQL Server.

 188
Author: Lin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-19 13:59:46

Chciałbym dodać, że odpowiedź Lin jest poprawna.

Jeśli nieprawidłowo usuniesz MDF, będziesz musiał go naprawić. Aby naprawić przykręcone połączenia w projekcie do płyty MDF. Krótka odpowiedź; odtworzyć i usunąć go poprawnie.

  1. Utwórz nowy MDF i nazwij go tak samo jak stary MDF, umieść go w tej samej lokalizacji folderu. Możesz utworzyć nowy projekt i utworzyć nowy mdf. Mdf nie musi pasować do starych tabel, ponieważ zamierzamy go usunąć. Więc utwórz lub skopiuj Stary do właściwego folderu.
  2. otwórz go w server explorer [kliknij dwukrotnie płytę mdf z solution explorer]
  3. usuń go w server explorer
  4. usuń go z solution explorer
  5. run update-database -force [użyj siły w razie potrzeby]
Done, enjoy your new db

UPDATE 11/12/14-używam tego cały czas, gdy robię przełomową zmianę db. Znalazłem to świetny sposób, aby cofnąć migracje do oryginalnego db:

  • odkłada db z powrotem na original
  • Uruchom normalną migrację, aby przywrócić ją do bieżącego

    1. Update-Database -TargetMigration:0 -force [zniszczy to wszystkie tabele i wszystkie dane.]
    2. Update-Database -force [Użyj siły, jeśli to konieczne]
 42
Author: Steve Coleman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-11 20:51:06

To mi się udało:

  1. Usuń bazę danych z SQL Server Object Explorer w Visual Studio. Kliknij prawym przyciskiem myszy i wybierz Usuń.
  2. Usuń pliki mdf i ldf z systemu plików - jeśli nadal tam są.
  3. Odbudować Rozwiązanie.
  4. Uruchom aplikację-baza danych zostanie ponownie utworzona.
 7
Author: Donal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-11 23:07:51

Podczas gdy to pytanie opiera się na nie dbaniu o dane, czasami utrzymanie danych jest niezbędne.

Jeśli tak, napisałem listę kroków, jak odzyskać z encji Framework nightmare, gdy baza danych ma już tabele o tej samej nazwie tutaj: Jak odzyskać z encji Framework nightmare - baza danych ma już tabele o tej samej nazwie

Najwyraźniej... moderator uznał za stosowne usunąć mój post więc wkleję go tutaj:

Jak odzyskać od Entity Framework - baza danych posiada już tabele o tej samej nazwie

Opis: Jeśli jesteś taki jak my, 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 to działa na produkcję, nie możesz utworzyć lokalnego db, a jeśli to działa na lokalne, twoja produkcja serwer nie jest zsynchronizowany. I wreszcie, nie chcesz usuwać żadnych danych serwera produkcyjnego.

Objaw : nie można uruchomić Aktualizacja-Baza Danych ponieważ próbuje uruchomić skrypt tworzenia, a baza danych ma już tabele o tej samej nazwie.

Komunikat O Błędzie: System.Data.SqlClient.SqlException (0x80131904): tam jest już obiektem o nazwie "" w bazie danych.

Tło problemu: EF rozumie, gdzie obecny baza danych jest w porównaniu do tego, gdzie kod jest w oparciu o tabelę w bazie danych o nazwie dbo.__migracjahistoria Gdy spojrzy na Skrypty migracji, próbuje ponownie odtworzyć, gdzie był ostatnio ze skryptami. Jeśli nie może, po prostu stara się zastosować je w kolejności. Oznacza to, że wraca do początkowego skryptu tworzenia i jeśli spojrzysz na pierwszą część polecenia UP, będzie to CreeateTable dla tabeli, na której wystąpił błąd.

Aby zrozumieć to bardziej szczegółowo, Polecam obejrzenie obu wymienionych tu filmików: https://msdn.microsoft.com/en-us/library/dn481501 (v=vs.113). aspx

Solution: to, co musimy zrobić, to nakłonić EF do myślenia, że bieżąca baza danych jest aktualna, nie stosując tych poleceń CreateTable. Jednocześnie chcemy, aby te polecenia istniały, abyśmy mogli tworzyć nowe lokalne bazy danych.

Krok 1: Produkcja DB clean Najpierw wykonaj kopię zapasową bazy danych produkcji. W SSMS, Kliknij prawym przyciskiem myszy bazę danych, wybierz " zadania > Eksportuj aplikację warstwy danych..."i postępuj zgodnie z instrukcjami. Otwórz bazę danych produkcji i usuń / upuść dbo.__migrationhistory table.

Krok 2: czyste środowisko lokalne Otwórz folder migracje i usuń go. Zakładam, że w razie potrzeby możesz to wszystko odzyskać od git ' a.

Krok 3: Odtworzyć Początkowy W menedżerze pakietów Uruchom "Enable-Migrations "(EF poprosi Cię o użycie -ContextTypeName, jeśli masz wielu kontekstach). Uruchom "Add-Migration Initial-verbose". Spowoduje to utworzenie początkowego skryptu do tworzenia bazy danych od podstaw na podstawie bieżącego kodu. Jeśli w poprzedniej konfiguracji były jakieś operacje nasienne.cs, skopiuj to.

Krok 4: Trick EF W tym momencie, jeśli pobiegniemy Aktualizacja-Baza Danych, dostalibyśmy oryginalny błąd. Musimy więc nakłonić EF do myślenia, że jest on aktualny, bez uruchamiania tych komend. Więc idź do góry metoda w początkowej migracji, którą właśnie stworzyłeś i skomentuj to wszystko.

Krok 5: Update-Database Bez kodu do wykonania w procesie Up, EF utworzy dbo.__migrationhistory tabela z poprawnym wpisem, aby powiedzieć, że uruchomił ten skrypt poprawnie. Idź i sprawdź, jeśli chcesz. Teraz odkomentuj ten kod i zapisz. You can run Aktualizacja-Baza Danych ponownie, jeśli chcesz sprawdzić, czy EF uważa, że jest aktualna. To nie będzie uruchomić krok w górę z wszystkich Polecenia CreateTable, ponieważ myśli, że już to zrobił.

Krok 6: Potwierdź aktualność EF Jeśli masz kod, który nie miał jeszcze migracje stosowane do niego, to jest to, co zrobiłem...

Run " Add-Migration MissingMigrations" Spowoduje to utworzenie praktycznie pustego skryptu. Ponieważ kod był już tam, nie było rzeczywiście poprawne polecenia do tworzenia tych tabel w skrypcie migracji początkowej, więc po prostu wyciąć CreateTable i równoważne polecenia drop w górę iw dół metody.

Teraz uciekaj Aktualizacja-Baza Danych Jeszcze raz i obserwuj, jak wykonuje Twój nowy skrypt migracji, tworząc odpowiednie tabele w bazie danych.

Krok 7: ponownie potwierdź i zatwierdź. Buduj, testuj, uciekaj. Upewnij się, że wszystko działa, a następnie zatwierdź zmiany.

Krok 8: poinformuj resztę swojego zespołu,jak postępować. Gdy następna osoba zaktualizuje, EF nie będzie wiedział, co go uderzyło, biorąc pod uwagę, że skrypty, które wcześniej uruchomił nie istnieją. Ale zakładając, że lokalne bazy danych mogą zostać zdmuchnięte i ponownie utworzone, to wszystko jest dobre. Będą musieli upuścić swoją lokalną bazę danych i dodać ponownie utwórz ją z EF. Jeśli mieli lokalne zmiany i oczekujące migracje, polecam utworzyć ich DB ponownie NA master, przełączyć się do ich gałęzi funkcji i ponownie utworzyć te skrypty migracji od zera.

 2
Author: System.Exception,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-07 09:49:41

Po prostu chcę dodać do doskonałej odpowiedzi @Lin:

5) B. Jeśli nie masz SQL Management Studio, przejdź do "SQL Server Object Explorer". Jeśli nie widzisz swojego projektu db w localdb "SQL Server Object Explorer", kliknij przycisk "Add SQL server", aby dodać go do listy ręcznie. Następnie możesz usunąć db z listy.

 1
Author: Dudi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-25 10:13:32

Możliwe bardzo proste poprawki, które zadziałały dla mnie. Po usunięciu wszelkich odniesień do bazy danych i połączeń, które znajdziesz w server / serverobject explorer, kliknij prawym przyciskiem myszy folder App_Data (dla mnie nie pokazywał ż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.

 0
Author: edencorbin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-31 18:47:13

Moje rozwiązanie najlepiej nadaje się do :
- deleted your mdf file
- chcesz odtworzyć db.

Aby odtworzyć bazę danych należy dodać połączenie za pomocą Visual Studio.

Krok 1 : Przejdź do Eksploratora serwera dodaj nowe połączenie (lub poszukaj ikony Dodaj db).

Krok 2: Zmień Datasource na Plik bazy danych Microsoft SQL Server.

Krok 3 : Dodaj dowolną bazę danych nazwa, której szukasz w polu Nazwa pliku bazy danych .(najlepiej o tej samej nazwie, którą masz w sieci.config AttachDbFilename atrybut)

Krok 4 : kliknij Przeglądaj i przejdź do miejsca, w którym chcesz go znaleźć.

Krok 5: w konsoli Menedżera pakietów uruchom polecenie update-database

 0
Author: Mbuso Mkhize,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 11:52:16