Hinzufügen einer neuen Tabelle zu einer vorhandenen Datenbank mit Code First Ansatz in EF 6 und MVC 5

8

Ich weiß, dass dies einfach sein sollte, aber ich konnte zu diesem Thema kein richtiges Tutorial oder eine Erklärung im Web finden. Es gibt viele Videos und Beiträge über das Hinzufügen neuer Spalte zu einer bestehenden Tabelle, mit Code First Approach, aber ich kann keine finden mit Schritt für Schritt Erklärung, wie Sie ganz neue Tabelle in bestehende Datenbank hinzufügen. Was seltsam ist, ich war mir ziemlich sicher, dass ich viele Beispiele finden werde. Vielleicht sind meine Suchkriterien schlecht. Also, wenn jemand einen guten Link oder ein Video hat, bitte teilen.

Was ich versuche ist, die Tabelle Post in die existierende Standard-Datenbank einzufügen, die vom MVC 5-Projekt erstellt wurde. Ich habe zuerst die Modellklasse gemacht, es Post genannt und es hat eine einfache Definition:

%Vor%

Dann habe ich erste Zweifel. Ich weiß, ich sollte DbContext erstellen, aber wenn ich eine vorhandene Datenbank treffen möchte, sollte ich vorhandenen DbContext verwenden, bereits standardmäßig in Web.config-Datei wie folgt erstellt:

%Vor%

Oder sollte ich alle neuen DbContext für Post-Klasse erstellt?

Jedenfalls habe ich beides versucht, aber keinen Erfolg. Als ich diesen neuen Kontext kreierte, machte ich folgendes in PMC:

%Vor%

Gewöhnlich oder alles geht gut, aber ich bekomme keine neue Tabelle in der Datenbank oder erhalte einen Fehler: AspNetUsers existiert bereits, und AspNetUsers ist eine der automatisch erstellten Tabellen, die ich durch Hinzufügen neuer Spalten geändert habe dazu.

Update: Mein Kontext befindet sich gerade in der separaten Klasse PostContext und sieht so aus:

%Vor%

Zweiter Versuch:

Seit meiner ersten Annäherung gab es kein Ergebnis. Ich habe versucht zu tun, was in diesem Link . Hinzufügen von Mapping zu meinem Projekt:

Ich habe eine neue Klasse PostConfiguration zum Mapping erstellt:

%Vor%

In der Klasse Post habe ich auch die Kontextklasse PostContext mit der modelBuilder -Variable hinzugefügt, wie sie im oben aufgeführten Link vorgeschlagen wurde:

%Vor%

Ich habe alle PMC-Befehle erneut ausgeführt, und immer noch keinen Erfolg, Tabelle fehlt in der Standarddatenbank.

    
nemo_87 15.01.2015, 07:49
quelle

1 Antwort

17

Was hier passiert ist, dass Sie bereits vor den Migrationen vorhandene Datenbanktabellen hatten. Entity Framework ist der Ansicht, dass ALLE Datenbankobjekte erstellt werden müssen. Dies kann durch Öffnen der PostMigration-Migrationsdatei angezeigt werden.

Der beste Weg ist, EF dazu zu bringen, die anfängliche Migration mit jedem durchzuführen, bevor Sie die Post-Tabelle hinzugefügt haben und dann die Migration der Posts nachher durchführen.

Schritte

  1. Kommentieren Sie die Posts im DBContext, damit EF nichts von Posts weiß

    %Vor%
  2. Migrationen aktivieren

    %Vor%
  3. Fügen Sie vor Ihren Änderungen eine erste Migration mit allen Tabellen hinzu

    %Vor%
  4. Aktualisieren Sie jetzt die Datenbank. Dadurch wird eine MigrationHistory-Tabelle erstellt, sodass EF weiß, welche Migrationen ausgeführt wurden.

    %Vor%
  5. Jetzt können Sie die Zeile in 1 auskommentieren zu "Tun Sie Ihre Änderung"

  6. Erstellen Sie eine neue Migration mit Hinzufügung von Posts

    %Vor%
  7. Nun mach ein Update ... und hoffentlich sollte alles funktionieren.

    %Vor%

Jetzt, da alle Migrationen eingerichtet sind und sie eine Baseline haben, sind zukünftige Migrationen einfach.

Für weitere Informationen habe ich diesen Link nützlich gefunden: Ссылка

    
Oliver 15.01.2015 09:02
quelle