web-dev-qa-db-de.com

Hinzufügen einer neuen Spalte zu einer vorhandenen Tabelle in Entity Framework

Ich habe eine neue Spalte zu einer Tabelle in meiner Datenbank hinzugefügt. Die Tabelle ist bereits im vorhandenen Entity Framework-Modell definiert. Ich habe die meisten der hier aufgeführten Punkte durchgearbeitet und es scheitert immer noch. 

Vor einiger Zeit wurde dieses Entitätsmodell in den letzten 3 Jahren nicht aktualisiert. Abgesehen von der Spalte, die ich hinzufüge, weiß ich, dass es in dieser Zeit eine Reihe anderer Spalten gab, die jedoch nie enthalten waren. Ich habe das Projekt vor etwa 9 Monaten übernommen und konnte das Modell nie erfolgreich aktualisieren.

Erster Versuch:

  • Das Modell wurde in Visual Studio geöffnet
  • Rechts auf den Hintergrund geklickt
  • Klicken Sie auf "Modell aus Datenbank aktualisieren ...".
  • Klicken Sie auf die Registerkarte Aktualisieren
  • Ausgewählte Tabellen
  • Die bestimmte Tabelle hervorgehoben
  • Klicken Sie auf Fertig stellen

Ergebnis:  

  • Klassen für Dutzende von Tabellen, die sich in meinem Modell befanden, wurden gelöscht
  • Die betreffende Tabelle wurde nicht aktualisiert

Zweiter Versuch

  • Alle Quelle wiederhergestellt
  • Gleich wie oben aber
  • Klicken Sie nach dem Öffnen des Update-Assistenten auf die Registerkarte "Löschen"
  • Ausgewählte Tabellen
  • Klicken Sie auf Fertig stellen
  • Alle Tabellen wurden gelöscht
  • Das EF-Modell wurde gespeichert/geschlossen/geöffnet
  • Zurück zum Update Wizard Add Tab
  • Klicken Sie auf Tabellen
  • Keiner meiner Tische wurde angezeigt, als ich alles erweiterte
  • Aktivieren Sie das Kontrollkästchen auf der Tabellenebene

Ergebnis

  • Keiner meiner Tische wurde wieder hinzugefügt, aber alles, was ursprünglich nicht in Enthalten war, wurde hinzugefügt

Dritter Versuch

  • Alle Quelle wiederhergestellt
  • Die beiden .tt-Dateien wurden gelöscht
  • Der Update-Assistent wurde geöffnet
  • Klicken Sie für alles auf Hinzufügen

Ergebnis

  • Es wurde nichts neu erstellt, keine .tt-Dateien oder sonst etwas.

Vierter Versuch

  • Wiederhergestellte Quelle
  • Tabelle aus dem EF-Modell gelöscht
  • Geöffneter Update-Assistent
  • Klicken Sie auf Tabellen hinzufügen

Ergebnisse

  • Klassen für Dutzende von Tabellen, die sich in meinem Modell befanden, wurden gelöscht
  • Die betreffende Tabelle wurde nicht wieder hinzugefügt

Letzter Versuch

  • Entität manuell zum Modell hinzugefügt

Ergebnis

  • Code alles kompiliert und ausgeführt, aber Werte wurden nie aus der Datenbank abgerufen oder aktualisiert

Jede Hilfe oder Anleitung, die bereitgestellt werden könnte, wäre sehr dankbar, da ich mich an einem kritischen Punkt befinde und das Modell aktualisieren muss.

9
Rodney Buxton

Das "Update Model from Database" ist schwer zu bedienen und anfällig für Fehler. Es generiert andere Dinge, die Sie wahrscheinlich nicht wollen/brauchen. Das manuelle Hinzufügen der von Ihnen benötigten Spalte wird also besser funktionieren. Ich schlage vor, dass Sie es außerhalb des VS-Editors tun, da es je nach Anzahl der Modelle/Tabellen sehr langsam sein kann, die Datei in VS zu öffnen. 

 1. So in Windows Exlorer,right click on the *.edmx file and open with Notepad (or Notepad++/Textpad).

 2. Search for the text <EntityType Name="YourTableNameToAddColumn">.

 3. Add the property <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" />

 4. Search for the text <MappingFragment StoreEntitySet="YourTableNameToAddColumn">

 5. Add mapping to the new column <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/>

 6. Save the *.edmx file
16
alltej

Ein Nachtrag zur Antwort von alltej oben und die Antwort von Chris Walsh, dass er erhält: "Das als Teil dieser MSL angegebene konzeptionelle Element Member oder Property 'xxxxx' ist in MetadataWorkspace nicht vorhanden."

Sie müssen sicherstellen, dass Sie 'Add the property' inZWEIOrten in Ihrer .edmx-Datei suchen. Andernfalls erhalten Sie Chris 'Fehler

6
Ken.Fukizi

1. Klicken Sie in Windows Exlorer mit der rechten Maustaste auf die * .edmx-Datei und öffnen Sie sie mit dem Editor (oder Notepad ++/Textpad).

2.Suchen Sie nach dem Text <EntityType Name="YourTableNameToAddColumn">.

3.Fügen Sie die Eigenschaft <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" /> hinzu.

4.Suchen Sie erneut nach dem Text <EntityType Name="YourTableNameToAddColumn">, es gibt einen zweiten.

5.Fügen Sie die Eigenschaft <Property Name="YourNewColumnName" Type="varchar" MaxLength="64" /> hinzu.

6.Suchen Sie den Text <MappingFragment StoreEntitySet="YourTableNameToAddColumn">.

7.Fügen Sie die Zuordnung zur neuen Spalte <ScalarProperty Name="YourNewColumnName" ColumnName="YourNewColumnName"/> hinzu.

8.Speichern Sie die * .edmx-Datei

9.Nach diesem Update das edmx-Modell Ihrer Tabelle public string YourNewColumnName { get; set; }

1
Nestoras Rose

Das Problem herausgefunden. Beim Generieren des Modells erhielt ich einen Fehler 113: Multiplizität ist in Rolle nicht gültig. Ich habe es nicht unter den anderen 16307-Fehlern bemerkt, die erzeugt wurden, als die Erstellung fehlgeschlagen ist. Einmal habe ich behoben, dass alles gut funktioniert hat.

Vielen Dank

1
Rodney Buxton

Ich habe diese Frage gerade gefunden, als ich eine Situation hatte, in der ich einer Tabelle einige Spalten hinzugefügt habe und meine EDMX-Datei problemlos aktualisiert wurde. Die Codegenerierung wurde jedoch nicht ordnungsgemäß ausgelöst, sodass meine CS-Dateien nicht aktualisiert wurden. Ich habe mit der rechten Maustaste auf die Datei "Entities.tt" geklickt und "Run Custom Tool" (Benutzerdefiniertes Tool ausführen) ausgewählt, mit dem die Texttransformationen ausgeführt und für mich behoben werden.

0
DomenicDatti

WARNUNG: Wenn Sie Ihre Datenbank nicht löschen können, befolgen Sie diese Schritte NICHT!

Ich verwende Visual Code (.net 2) . So habe ich es gelöst:

Löschen Sie zuerst Ihre Datenbank:

dotnet ef database drop

Dann entfernen Sie alle Migrationen:

dotnet ef migrations remove

Führen Sie den gleichen Befehl aus, bis alle Migrationen gelöscht werden!

Fügen Sie Ihre erste Migration hinzu:

dotnet ef migrations add InitialCreate

Nachdem Sie den oben aufgeführten Befehl ausgeführt haben, stellen Sie sicher, dass Sie die Änderungen an der neuen Datei vornehmen, wahrscheinlich unter Daten/Migrationen file: Zeitstempel + InitialCreatenicht in der Desingdatei

Bildbeispiel: Hinzufügen einer neuen Spalte

Nachdem Sie Ihre Spalten hinzugefügt haben und alles konsistent ist, speichern Sie das Projekt und führen den folgenden Befehl aus:

dotnet ef database update

Wenn alles in Ordnung ist, wird Ihre neue Spalte erstellt.

0
LAT94