Antworten:
Es gibt drei Möglichkeiten, das Modell synchron zu halten.
Löschen Sie die geänderten Tabellen aus dem Designer und ziehen Sie sie aus dem Datenbank-Explorer zurück auf die Designer-Oberfläche. Ich habe festgestellt, dass Sie, damit dies zuverlässig funktioniert, Folgendes tun müssen:
ein. Aktualisieren Sie das Datenbankschema im Datenbank-Explorer (Rechtsklick, Aktualisieren).
B. Speichern Sie den Designer nach dem Löschen der Tabellen.
C. Speichern Sie erneut, nachdem Sie die Tabellen zurückgezogen haben.
Beachten Sie jedoch, dass wenn Sie Eigenschaften geändert haben (z. B. die untergeordnete Eigenschaft einer Zuordnung deaktivieren), diese Änderungen offensichtlich verloren gehen - Sie müssen sie erneut vornehmen.
Verwenden Sie SQLMetal, um das Schema aus Ihrer Datenbank neu zu generieren. Ich habe eine Reihe von Blog-Posts gesehen, die zeigen, wie man dies schreibt .
Nehmen Sie Änderungen direkt im Eigenschaftenbereich der DBML vor. Dies funktioniert für einfache Änderungen, z. B. das Zulassen von Nullen in einem Feld.
Der DBML-Designer wird in Visual Studio 2015, 2017 oder 2019 nicht standardmäßig installiert. Sie müssen VS schließen, das VS-Installationsprogramm starten und Ihre Installation ändern. Die LINQ to SQL-Tools müssen installiert werden. Für VS 2017/2019 finden Sie es unter Einzelkomponenten> Code-Tools .
Gehen Sie folgendermaßen vor, um eine Tabelle in Ihrem DBML-Diagramm mit beispielsweise hinzugefügten Spalten zu aktualisieren:
Sie könnten auch die Besuche PLINQO Satz von Codegenerierungsvorlagen, basierend auf Codesmith, die Ihnen erlauben , für und mit Linq-to-SQL viele nette Dinge zu tun:
Besuchen Sie die PLINQO-Website unter http://www.plinqo.com und sehen Sie sich die Intro-Videos an.
Das zweite mir bekannte Tool sind die Huagati DBML / EDMX-Tools , mit denen die Aktualisierung von DBML-Zuordnungsdateien (Linq-to-SQL) und EDMX-Zuordnungsdateien (Entity Framework) und mehr (wie Namenskonventionen usw.) ermöglicht wird.
Marc
Wir verwenden eine benutzerdefinierte geschriebene T4-Vorlage, die das Modell information_schema für jede Tabelle in allen unseren DBML-Dateien dynamisch abfragt und dann Teile der DBML-Datei mit neuen Schemainformationen aus der Datenbank überschreibt. Ich hochIch empfehle die Implementierung einer solchen Lösung - sie hat mir Unmengen an Zeit gespart und im Gegensatz zum Löschen und erneuten Hinzufügen Ihrer Tabellen zu Ihrem Modell können Sie Ihre Assoziationen beibehalten. Mit dieser Lösung erhalten Sie Fehler bei der Kompilierung, wenn sich Ihr Schema ändert. Sie möchten jedoch sicherstellen, dass Sie ein Versionskontrollsystem verwenden, da Unterschiede sehr praktisch sind. Dies ist eine großartige Lösung, die gut funktioniert, wenn Sie mit einem ersten Ansatz für ein DB-Schema entwickeln. Natürlich kann ich den Code meines Unternehmens nicht teilen, daher sind Sie allein, um diesen Code selbst zu schreiben. Wenn Sie jedoch mit Linq-to-XML vertraut sind und mit diesem Projekt zur Schule gehen können , können Sie dorthin gelangen, wo Sie sein möchten.
Ich würde empfehlen, den in VS2008 integrierten visuellen Designer zu verwenden, da durch das Aktualisieren der Datenbank auch der für Sie generierte Code aktualisiert wird. Das Ändern der Datenbank außerhalb des visuellen Designers würde dazu führen, dass der zugrunde liegende Code nicht synchron ist.
Das Aktualisieren von Tabellen und das Aktualisieren der DBML hat eine Nuance ... Fremdschlüsselbeziehungen werden nicht immer sofort übernommen, wenn Änderungen an vorhandenen Tabellen vorgenommen werden. Die Problemumgehung besteht darin, ein Projekt zu erstellen und die Tabellen dann erneut hinzuzufügen. Ich habe dies MS gemeldet und es wurde für VS2010 behoben.
In der DBML-Anzeige werden keine neuen Fremdschlüsseleinschränkungen angezeigt
Beachten Sie, dass die Anweisungen in der Hauptantwort nicht klar sind. So aktualisieren Sie die Tabelle
Im Falle einer Aktualisierung der gespeicherten Prozedur sollten Sie diese aus der DBML-Datei löschen und erneut einfügen. Wenn die gespeicherte Prozedur jedoch zwei Pfade hat (z. B. wenn etwas; einige Spalten anzeigen; andernfalls andere Spalten anzeigen), stellen Sie sicher, dass die beiden Pfade dieselben Spalten-Aliase haben !!! Andernfalls sind nur die ersten Pfadspalten vorhanden.
Hier ist die vollständige Schritt-für-Schritt-Methode, die für mich funktioniert hat, um die LINQ auf SQL-Datenbank und zugehörige Dateien zu aktualisieren und eine neue Spalte aufzunehmen, die ich einer der Datenbanktabellen hinzugefügt habe.
Sie müssen die Änderungen an Ihrer Entwurfsoberfläche vornehmen, wie von anderen oben vorgeschlagen. Sie müssen jedoch einige zusätzliche Schritte ausführen. Dies sind die vollständigen Schritte:
1. Drag your updated table from Server Explorer onto the design surface
2. Copy the new column from this "new" table to the "old" table (see M463 answer for details on this step)
3. Delete the "new" table that you just dragged over
4. Click and highlight the stored procedure, then delete it
5. Drag the new stored procedure and drop into place.
6. Delete the .designer.vb file in the code-behind of the .dbml
(if you do not delete this, your code-behind containing the schema will
not update even if you rebuild and the new table field will not be included)
7. Clean and Rebuild the solution (this will rebuild the .designer.vb file to include all the new changes!).