2009-06-02 6 views
0

Ich bin ziemlich neu in LINQ to SQL, so dass ich etwas Grundlegendes hier vermissen könnte.LINQ to SQL - Umgang mit Änderungen an der Datenbank

Ich erstellte eine LINQ to SQL-Ebene, generierte alle dbml-Dateien usw. und erstellte eine LINQ-Abfrage, die einwandfrei funktionierte. Ich habe dann eine Änderung an der Datenbank vorgenommen und wollte diese Änderung in der ORM-Ebene widerspiegeln. Um dies zu tun, löschte ich meine ORM-Ebene und erstellte eine neue Ebene (möglicherweise nicht der beste Weg?).

Jetzt ist mein Code nicht in der Lage, das DataContext-Objekt in Intellisense zu sehen und wird nicht kompilieren. Ich kann mir vorstellen, dass dies etwas Einfaches ist, aber ich möchte auch das größere Bild davon verstehen, wie man den LINQ to SQL ORM-Layer aktualisiert, wenn sich die Datenbank ändert.

+0

Dies ist ein Duplikat von ... http://stackoverflow.com/questions/40022/best-way-to-update-linq-to-sql-classes-after-database-schema-change – SteveC

Antwort

2

Ja, Sie möchten nicht Ihre gesamte DBML-Datei löschen. Öffnen Sie es im Designer und löschen Sie die geänderte Tabelle. Ziehen Sie es dann erneut aus dem "Server Explorer" (im Ansichtsmenü). Dies wird eine aktualisierte Kopie der Datenbank laden ... Beachten Sie, dass, wenn Server Explorer bereits geöffnet ist, während Sie die Änderung an das SQL-Schema vornehmen, müssen Sie Server Explorer aktualisieren, damit es die neuesten Versionen hat.

Der Nachteil dieses Ansatzes besteht darin, dass wenn Sie Anpassungen an der Tabelle in der DBML vornehmen, diese erneut ausgeführt werden müssen. Dies ist ein seltener Fall für mich.

+0

Anpassungen sind nicht betroffen, wenn Sie sie in eine Teilklasse einfügen. Ihre partielle Klasse wird nicht neu generiert, wenn die DBML aktualisiert wird. –

+0

Die Anpassungen, auf die ich mich bezog, sind Änderungen, die Sie innerhalb des Designers vornehmen würden (z. B. Ändern des Namens von Eigenschaften, Erstellen von Eigenschaften mit Verzögerung usw.). –

0

Ich erinnere mich, dieses Problem einen Haufen zu haben. Die Lösung ist einfach, wirklich. Stellen Sie Ihre Lösung wieder her! Der DataContext und andere solche Klassen werden während eines Builds generiert.

Ziemlich Kopfschmerzen - Ich wünschte, das DBML-Tool hat dies für Sie getan, wenn Sie es geschlossen haben.

+0

Wiederaufbau ist nicht ausreichend um die ORM-Schicht zu aktualisieren. Sie müssen die betroffene Tabelle aus dem Designer löschen und erneut hinzufügen. –

+0

Er sagte, er habe das getan. – JoshJordan

0

Sie können auch SQLMetal verwenden, um Ihre DBML-Klassen zu aktualisieren. Manche Leute schreiben sogar ein Skript oder eine Batch-Datei, um den Prozess zu automatisieren.