7

Ich verwende Entity Framework mit automatischen Migrationen.Wie lösche ich zuerst eine Tabelle in Entity Framework Code?

Wenn ich also ein neues Modell zu meinem Kontext hinzufüge, wird meine Datenbank aktualisiert und neue Tabelle erstellt.

Was ich tun möchte, ist das Gegenteil, die Tabelle vollständig aus der Datenbank löschen. Das Entfernen der Definition aus der Context-Klasse funktioniert jedoch nicht.

Zum Beispiel möchte ich Company Tabelle aus der Datenbank entfernen. Um das zu tun, entferne ich Companies Eigenschaft von CompanyContext Klasse. Es funktioniert jedoch nicht.

Was ist der richtige Weg, Tabellen in EF zu löschen und Auto-Migrationen zu verwenden, wenn möglich?

Antwort

1

Sie sollten Ihren "IDatabaseInitializer" implementieren und benutzerdefinierte Logik für diesen Vorgang erstellen. Zum Beispiel, besuchen Sie bitte this

Siehe auch "How do I use Entity Framework in Code First Drop-Create mode?", wenn es helfen kann.

In meiner eigenen Erfahrung, ich habe es getan, indem die unter Anweisung von Paket Konsole Manager von VS 2010 läuft

update-database -StartupProjectName "Your Project Namespace" -script -Verbose –force 

Stellen Sie sicher, dass „Ihr Projekt-Namespace“ ausgewählt als Standard-Projekt.

+0

Soweit ich weiß, löscht DropCreateDatabaseAlways die gesamte Datenbank und erstellt sie neu. Als Ergebnis haben Sie Daten verloren. Ich möchte nur die einzelne Tabelle löschen. –

+0

Warum aktualisieren Sie dann Ihr Modell nicht und führen den oben erwähnten Paketmanager-Konsolenbefehl aus? – CodeMad

+1

Ich habe das getan. Ich habe die Modellklassen aus der DbContext-Klasse entfernt und auch die Modelldatei selbst gelöscht. Ich dachte, automatische Migrationen sollten den Rest erledigen. Es ist nicht. –

1

Fügen Sie der Konfigurationsklasse AutomaticMigrationDataLossAllowed = true; hinzu, und die Tabellen werden automatisch gelöscht.

2

Der Befehl add-migrations erstellt einen Migrationsordner. Sie können die Datei [DateStamp] _InitialCreate.cs mit zwei Methoden sehen, nämlich. Auf und ab. Die Up-Methode der InitialCreate-Klasse erstellt die Datenbanktabellen, die den Datenmodell-Entitätsgruppen entsprechen, und die Down-Methode löscht sie. Wenn Sie einen Befehl zum Zurücksetzen einer Datenbank eingeben, wird normalerweise die Down-Methode aufgerufen. Sie können Anweisungen wie DropIndex, DropForeignKey, DropTable-Anweisungen in der Down-Methode sehen.

Wenn die Frage von Emre gestellt wird, schreiben Sie die DropTable-Anweisung in die Down-Methode der Klasse [DateStamp] _InitialCreate.cs und die Tabelle wird gelöscht.

Hoffentlich wird es helfen.