2012-10-24 9 views
9

In Visual Studio 2010 EF 4 konnte ich eine neue Spalte zu einer Datenbanktabelle hinzufügen und dann auf meiner .edmx auf 'Update Model from Database' klicken Alles war gut in der Welt.VS 2012 - EF 5.0 - Aktualisieren des Modells aus der Datenbank - Keine Tabellenänderungen übernehmen

In Visual Studio 2012 EF 5, ändere ich eine Tabelle, und klicken Sie dann auf "Update Model from Database" und es nimmt die Änderungen an einzelnen Tabellen nicht mehr auf.

Fehle ich etwas ... oder ist das ein neues "Feature" von VS2012?

aktualisiert Der einzige Weg, ich eine Tabelle mit einer zusätzlichen Spalte erhalten kann in der .edmx Datei zu reflektieren ist die Tabelle dann ‚Update Modell aus der Datenbank‘ zu löschen, und es wird die zusätzliche Spalt abholen. Allerdings legt es die hinzugefügte Tabelle weit nach links und ich muss sie wieder an Ort und Stelle verschieben. No biggie nur ein Ärgernis.

+2

Dies war schon immer skurril, auch unter den Jahren 2010 und 2008. Bestimmte Arten von Änderungen wurden noch nie auf das Modell übertragen. Vielleicht ist das einer dieser Fälle? –

+1

Ich höre dich, aber zumindest funktionierte es unter 2010, um eine Tabelle zu aktualisieren und die edmx würde es abholen. Dies bringt mich zurück zu den LINQ-Tagen, wo Sie das Element löschen müssen, dann fügen Sie es zurück in ... ugh – c0d3p03t

+0

Wie gesagt, es hat nicht immer so gemacht. Und Sie mussten das Objekt häufig entweder manuell aktualisieren oder löschen und neu hinzufügen. –

Antwort

2

Es gibt einen Unterschied zwischen einem EF-Modell und wie es in Ihrer Datenbank unterstrichen ist. Wenn Sie "Modell aus Datenbank aktualisieren", wenn die Entität/Tabelle bereits in Ihr Datenmodell importiert wurde, aktualisieren Sie die Entität. Dieser Prozess ordnet Ihr Datenbankschema nicht automatisch Ihrem vorhandenen Datenmodell zu. Sie können der Entität in Ihrem EF-Modell jedoch eine Eigenschaft hinzufügen und die Eigenschaft dann der Datenbankspalte zuordnen (genau das macht EF bei Ihnen automatisch für Sie) löschen und normal aktualisieren).

Wenn Sie die Entität zuerst löschen, weiß EF, dass die Tabelle/Entität noch nicht importiert wurde, und ordnet alle Datenbankspalten automatisch für Sie zu.

Zusammenfassend müssen Sie nicht die Entität löschen, aber es kann einfacher für einfache Entitäten sein.

+0

Nicht die Antwort Ich habe gehofft, aber es hilft, danke! – c0d3p03t

+0

Ich weiß, es ist ein Ärgernis, gelinde gesagt. Ich schätze, es liegt daran, dass Sie zwischen dem Hinzufügen und dem Aktualisieren des Elements zusätzliche Änderungen an der Entität vorgenommen haben könnten, aber sollte das nicht einfach ein Vergleich der Hash-Überprüfung sein? Ich bin sicher, dass das ADO.NET-Team seine Gründe hat. –

8

Ja, das funktioniert immer noch in VS2012. Verwenden Sie die Standardcodegenerierung oder haben Sie eine TT-Datei? Es könnte sein, dass es zum EDMX hinzugefügt wird, aber Ihre Klassendateien nicht aktualisiert werden.

Klicken Sie mit der rechten Maustaste auf die EDMX-Datei oder die entsprechende TT-Datei im Projektmappen-Explorer und wählen Sie "Benutzerdefiniertes Tool ausführen", um sicherzustellen, dass sie neu generiert wird.

+0

Das baut tatsächlich die Klassen um und nimmt Änderungen an der .edmx-Datei auf. Wenn ich jedoch eine Tabelle ändere, nimmt sie diese Änderungen immer noch nicht auf. Siehe hier: [screenshot] (http://screencast.com/t/fahh6WqNYZ) – c0d3p03t

+0

Die Tabelle mit den neuen Spalten wird nicht unter der Registerkarte "Hinzufügen" angezeigt; Sie werden auf der Registerkarte "Aktualisieren" sein. Ist Ihre Tabelle unter Aktualisieren in dieser Registerkarte aufgeführt? Das Hinzufügen einer neuen Spalte zu einer bestehenden Tabelle hat * immer * für mich unter 2010 und 2012 funktioniert. Aber ja, dass es WAAAY auf die Seite legt, ist ein neues Feature 2012 :) –

+0

+1 für "Run Custom Tool" – ADOConnection

0

Ich hatte eine ähnliche/das gleiche Problem, und ich löschte die Tabelle aus dem Modell, dann wählte "Update-Modell aus der Datenbank." Das hat wieder nicht funktioniert, und ich konnte nicht auf die neue Spalte zugreifen, die ich der Tabelle hinzugefügt habe.

Nachdem ich jedoch die Designerdatei des Modells manuell aus der Quellcodeverwaltung (Vault Professional) ausgecheckt und dann die Tabelle aus dem Modell gelöscht und das Modell erneut aus der Datenbank aktualisiert hatte, funktionierte es. Vielleicht weiß VS nicht, in diesem Fall die Designer-Datei des Modells auszuprobieren.

0

Es ist passiert, weil Sie eine Ihrer Entität löschen und jetzt wieder aus der Datenbank aktualisieren möchten. Das Modell speichert diese enitities, weshalb Sie nicht die Wahl haben, die Tabelle zu aktualisieren. Also müssen Sie rechts klicken auf Wählen Sie die Modellseite und wählen Sie die Modellbrowser-Option. Sie finden den Modellbrowser auf der rechten Seite. Löschen Sie die Entität, die Sie aktualisieren möchten, aus dem Entitätstyp folder.now, was auch immer Sie wollen.

Verwandte Themen