it-swarm.com.de

Wie kann ich eine Datenbank für Entity Framework neu erstellen?

Ich bin mit meinem ASP.Net MVC 5-Projekt mit Code-First Entity Framework in einen schlechten Zustand geraten. Es geht mir nicht darum, Daten zu verlieren, ich möchte nur in der Lage sein, neu zu beginnen, die Datenbank neu zu erstellen und Code-First-Migrationen zu verwenden. 

Derzeit bin ich in einem Zustand, in dem jeder Versuch der Update-Datenbank dazu führt, dass eine Ausnahme ausgelöst wird oder eine Fehlermeldung angezeigt wird. Die Website kann auch nicht korrekt auf die Datenbank zugreifen. Wie kann ich alle Migrationen löschen, die Datenbank neu erstellen und von vorne anfangen, ohne ein neues Projekt erstellen zu müssen? Mit anderen Worten, ich möchte meinen Code beibehalten, aber die Datenbank löschen.

Später möchte ich auch die Bereitstellungsdatenbank (SQL Server in Azure) synchronisieren. Ich habe nichts dagegen, alle Daten zu löschen - ich möchte nur, dass es funktioniert.

Bitte geben Sie alle Anweisungen an, um wieder in einen sauberen Zustand zu gelangen. Sehr geschätzt.

132
Toby Sharp

Befolgen Sie die folgenden Schritte:

1) Gehen Sie zuerst zum Server-Explorer in Visual Studio, überprüfen Sie, ob die ".mdf" -Datenverbindungen für dieses Projekt verbunden sind. Klicken Sie mit der rechten Maustaste, und löschen Sie sie.

2) Wechseln Sie zum Projektmappen-Explorer und klicken Sie auf das Symbol Alle Dateien anzeigen.

3) Gehen Sie zu App_Data, klicken Sie mit der rechten Maustaste und löschen Sie alle ".mdf" -Dateien für dieses Projekt.

4) Löschen Sie den Migrationsordner mit der rechten Maustaste und löschen Sie ihn.

5) Wechseln Sie zu SQL Server Management Studio, und stellen Sie sicher, dass die Datenbank für dieses Projekt nicht vorhanden ist. Andernfalls löschen Sie sie.

6) Wechseln Sie zur Package Manager Console in Visual Studio und geben Sie Folgendes ein:

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

7) Führen Sie Ihre Anwendung aus

Hinweis: Wenn Sie in Schritt 6 Teil 3 eine Fehlermeldung erhalten, dass die Datei nicht angefügt werden kann, liegt dies möglicherweise daran, dass Sie die Datenbankdateien nicht vollständig in SQL Server gelöscht haben. 

198
Lin

Ich möchte hinzufügen, dass Lins Antwort richtig ist. 

Wenn Sie das MDF nicht ordnungsgemäß löschen, müssen Sie es reparieren. Um die verschraubten Verbindungen im Projekt an der MDF zu befestigen. Kurze Antwort; neu erstellen und richtig löschen.

  1. Erstellen Sie ein neues MDF und benennen Sie es wie das alte MDF. Legen Sie es im selben Ordner ab. Sie können ein neues Projekt erstellen und eine neue MDF erstellen. Das MDF muss nicht mit Ihren alten Tabellen übereinstimmen, da es gelöscht werden würde. Erstellen oder kopieren Sie eine alte in den richtigen Ordner.
  2. Öffnen Sie es im Server-Explorer.
  3. Löschen Sie es im Server-Explorer
  4. Löschen Sie es aus dem Lösungs-Explorer
  5. run update-database -force [Gewalt anwenden wenn nötig]

Fertig, genießen Sie Ihre neue Db

UPDATE11/12/14 - Ich verwende dies ständig, wenn ich eine Datenbankänderung vorgenommen habe .. Ich fand, dass dies eine großartige Möglichkeit ist, um Ihre Migrationen auf die ursprüngliche Datenbank zurückzusetzen:

  • Setzt die DB auf das Original zurück 
  • Führen Sie die normale Migration aus, um sie auf den aktuellen Stand zurückzusetzen

    1. Update-Database -TargetMigration:0 -force [Dies zerstört alle Tabellen und alle Daten.] 
    2. Update-Database -force [ggf. Gewalt anwenden]
43
Steve Coleman

Das hat für mich funktioniert:

  1. Löschen Sie die Datenbank aus dem SQL Server-Objekt-Explorer in Visual Studio. Klicken Sie mit der rechten Maustaste und wählen Sie "Löschen".
  2. Löschen Sie mdf- und ldf-Dateien aus dem Dateisystem - sofern sie noch vorhanden sind.
  3. Lösung neu erstellen.
  4. Anwendung starten - Datenbank wird neu erstellt.
7
Donal

Während diese Frage davon ausgeht, dass die Daten nicht berücksichtigt werden, ist manchmal die Pflege der Daten unerlässlich.

In diesem Fall habe ich eine Liste mit Schritten zur Wiederherstellung von Entity Framework-Alptraum erstellt, wenn die Datenbank bereits Tabellen mit demselben Namen enthält: Wiederherstellung von Entity Framework-Alptraum - Datenbank enthält bereits Tabellen mit demselben Namen

Anscheinend ... hat ein Moderator es für angebracht gehalten, meinen Beitrag zu löschen, also füge ich ihn hier ein:

So stellen Sie den Alptraum von Entity Framework wieder her: Die Datenbank enthält bereits Tabellen mit demselben Namen

Beschreibung : Wenn Sie wie wir sind, wenn Ihr Team neu in EF ist, werden Sie in einem Zustand enden, in dem Sie entweder keine erstellen können neue lokale Datenbank oder Sie können keine Aktualisierungen auf Ihre Produktionsdatenbank anwenden. Sie möchten zu einer sauberen EF-Umgebung zurückkehren und sich dann an die Grundlagen halten, können dies jedoch nicht. Wenn Sie es für die Produktion zum Laufen bringen, können Sie keine lokale Datenbank erstellen, und wenn Sie es für die lokale Datenbank zum Laufen bringen, ist Ihr Produktionsserver nicht mehr synchron. Schließlich möchten Sie keine Produktionsserverdaten löschen.

Symptom : Kann nicht ausgeführt werden Update-Database weil versucht wird, das Erstellungsskript auszuführen und die Datenbank bereits Tabellen mit demselben Namen enthält.

Fehlermeldung: System.Data.SqlClient.SqlException (0x80131904): In der Datenbank befindet sich bereits ein Objekt mit dem Namen "".

Problem Hintergrund : EF versteht, wo sich die aktuelle Datenbank befindet, im Vergleich zu dem Ort, an dem sich der Code befindet, basierend auf einer Tabelle in der Datenbank mit dem Namen dbo .__ MigrationHistory. Wenn es sich die Migrationsskripte ansieht, versucht es, die Stelle, an der es zuletzt war, mit den Skripten abzugleichen. Wenn dies nicht möglich ist, wird nur versucht, sie der Reihe nach anzuwenden. Dies bedeutet, dass das Skript zum erstmaligen Erstellen wiederhergestellt wird. Wenn Sie sich den ersten Teil des Befehls UP ansehen, handelt es sich um die CreeateTable für die Tabelle, in der der Fehler aufgetreten ist.

Um dies genauer zu verstehen, würde ich empfehlen, beide hier genannten Videos anzusehen: https://msdn.Microsoft.com/en-us/library/dn481501 (v = vs.113) .aspx

Lösung : Wir müssen EF dazu verleiten, zu glauben, dass die aktuelle Datenbank auf dem neuesten Stand ist, ohne diese CreateTable-Befehle anzuwenden. Gleichzeitig möchten wir weiterhin, dass diese Befehle vorhanden sind, damit wir neue lokale Datenbanken erstellen können.

Schritt 1: Bereinigen der Produktionsdatenbank Erstellen Sie zunächst eine Sicherungskopie Ihrer Produktionsdatenbank. Klicken Sie in SSMS mit der rechten Maustaste auf die Datenbank, wählen Sie "Aufgaben> Datenebenenanwendung exportieren ..." und befolgen Sie die Anweisungen. Öffnen Sie Ihre Produktionsdatenbank und löschen/löschen Sie die Tabelle dbo .__ MigrationHistory.

Schritt 2: Lokale Umgebung bereinigen Öffnen Sie Ihren Migrationsordner und löschen Sie ihn. Ich gehe davon aus, dass Sie dies alles bei Bedarf von git zurückbekommen können.

Schritt 3: Initial neu erstellen Führen Sie im Paket-Manager "Enable-Migrations" aus (EF fordert Sie auf, -ContextTypeName zu verwenden, wenn Sie mehrere Kontexte haben). Führen Sie "Add-Migration Initial -verbose" aus. Dadurch wird das erste Skript erstellt, um die Datenbank basierend auf dem aktuellen Code von Grund auf neu zu erstellen. Wenn Sie in der vorherigen Datei "Configuration.cs" Startvorgänge ausgeführt haben, kopieren Sie diese über.

Schritt 4: Trick EF An diesem Punkt, wenn wir liefen Update-Database = , wir würden den ursprünglichen Fehler erhalten. Wir müssen EF dazu verleiten, zu denken, dass es auf dem neuesten Stand ist, ohne diese Befehle auszuführen. Rufen Sie also die Up-Methode in der soeben erstellten initialen Migration auf und kommentieren Sie alles aus.

Schritt 5: Update-Database Da für den Up-Prozess kein Code ausgeführt werden muss, erstellt EF die Tabelle dbo .__ MigrationHistory mit dem korrekten Eintrag, um dies mitzuteilen Dieses Skript wurde korrekt ausgeführt. Probieren Sie es aus, wenn Sie möchten. Jetzt den Code auskommentieren und speichern. Sie können Update-Database erneut ausführen, wenn Sie überprüfen möchten, ob EF für aktuell hält. Es wird nicht der Up-Schritt mit allen CreateTable-Befehlen ausgeführt, da es denkt, dass dies bereits geschehen ist.

Schritt 6: Bestätigen Sie, dass EF WIRKLICH auf dem neuesten Stand ist Wenn Sie Code hatten, auf den noch keine Migrationen angewendet wurden, ist dies das, was ich getan habe. .

Führen Sie "Add-Migration MissingMigrations" aus. Dadurch wird praktisch ein leeres Skript erstellt. Da der Code bereits vorhanden war, gab es tatsächlich die richtigen Befehle zum Erstellen dieser Tabellen im anfänglichen Migrationsskript. Daher habe ich nur die Befehle CreateTable und entsprechende drop in die Methoden Up und Down aufgeteilt.

Führen Sie jetzt Update-Database erneut aus, und beobachten Sie, wie Ihr neues Migrationsskript ausgeführt wird, und erstellen Sie die entsprechenden Tabellen in der Datenbank .

Schritt 7: Erneut bestätigen und festschreiben. Erstellen, testen, ausführen. Stellen Sie sicher, dass alles ausgeführt wird, und übernehmen Sie die Änderungen.

Schritt 8: Lassen Sie den Rest Ihres Teams wissen, wie es weitergeht. Wenn die nächste Person aktualisiert wird, weiß EF nicht, was sie getroffen hat, da die Skripte vorhanden sind es war gelaufen, bevor es nicht existierte. Vorausgesetzt, dass lokale Datenbanken weggeblasen und neu erstellt werden können, ist dies alles gut. Sie müssen ihre lokale Datenbank löschen und hinzufügen, um sie erneut aus EF zu erstellen. Wenn sie lokale Änderungen hatten und ausstehende Migrationen, würde ich empfehlen, dass sie ihre Datenbank erneut auf dem Master erstellen, zu ihrem Feature-Zweig wechseln und diese Migrationsskripten von Grund auf neu erstellen.

2

Ich möchte nur die ausgezeichnete Antwort von @Lin hinzufügen:

5) B. Wenn Sie nicht über SQL Management Studio verfügen, wechseln Sie zu "SQL Server Object Explorer" . Wenn Ihre Projektdatenbank nicht in der localdb "SQL Server Object Explorer" angezeigt wird, klicken Sie auf " Schaltfläche "SQL Server hinzufügen", um sie manuell zur Liste hinzuzufügen. Dann können Sie die Datenbank aus der Liste löschen.

1
Dudi

Meine Lösung eignet sich am besten für :
- hat Ihre MDF-Datei gelöscht
- möchte deine Datenbank neu erstellen.

Um Ihre Datenbank neu zu erstellen , müssen Sie die Verbindung mit Visual Studio hinzufügen.

Schritt 1 : Gehen Sie zum Server-Explorer und fügen Sie eine neue Verbindung hinzu (oder suchen Sie nach einem Add-DB-Symbol).

Schritt 2 : Ändern Sie die Datenquelle in Microsoft SQL Server-Datenbankdatei .

Schritt 3 : Fügen Sie einen beliebigen Datenbanknamen in die Datenbankdatei ein Feld. (vorzugsweise derselbe Name, den Sie in der Datei web.config angegeben haben. Attribut AttachDbFilename )

Schritt 4 : Klicken Sie auf Durchsuchen und navigieren Sie zu dem Ort, an dem Sie ihn haben möchten.

Schritt 5 : Führen Sie in der Package Manager-Konsole den Befehl update-database Aus.

0
Mbuso Mkhize

Eine mögliche sehr einfache Lösung, die für mich funktioniert hat. Nachdem Sie alle Datenbankverweise und Verbindungen gelöscht haben, die Sie im Server/ServerObject Explorer finden, klicken Sie mit der rechten Maustaste auf den Ordner App_Data (es wurden keine Objekte in der Anwendung für mich angezeigt), und wählen Sie Öffnen aus. Nach dem Öffnen legen Sie die gesamte Datenbank/etc. Dateien in einem Sicherungsordner oder wenn Sie den Mut haben, löschen Sie sie einfach. Führen Sie Ihre Anwendung aus und es sollte alles von Grund auf neu erstellt werden.

0
edencorbin