Der beste Weg, um LINQ nach einer Änderung des Datenbankschemas auf SQL-Klassen zu aktualisieren

76

Ich verwende LINQ to SQL-Klassen in einem Projekt, in dem das Datenbankdesign noch im Fluss ist.

Gibt es eine einfache Möglichkeit, die Klassen mit dem Schema zu synchronisieren, oder muss ich die Klassen manuell aktualisieren, wenn sich ein Tabellenentwurf ändert?

Kompilieren Sie dies
quelle
Mögliches Duplikat von Wie aktualisiere ich Linq auf eine SQL-Datenbankdatei?
Brian Webster

Antworten:

65

Sie können SQLMetal.exe verwenden, um Ihre dbml- und / oder cs / vb-Datei zu generieren. Verwenden Sie ein vorgefertigtes Skript, um es zu starten und auf das Verzeichnis abzuzielen, zu dem Ihr Datenkontextprojekt gehört.

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64\sqlmetal.exe 
  /server:<SERVER> 
  /database:<database> 
  /code:"path\Solution\DataContextProject\dbContext.cs" 
  /language:csharp 
  /namespace:<your namespace>
vzczc
quelle
Das ist toll! Ich dachte, ich müsste einfach alles in die Datenbank umwandeln.
Naspinski
14
Leider gibt es keine Möglichkeit, nur die gewünschten Tabellen / Sprocs / Schemas zu filtern ...
Seiti
Ich habe ein Dienstprogramm erstellt, um bei der Filterung zu helfen. Hier können Sie die Tabellen auswählen, die Sie ausschließen möchten, und auch die Tabellen auswählen, in denen die Datei updatecheck.never für Spalten ohne pk angezeigt werden soll. Lassen Sie mich wissen, wenn jemand den Quellcode möchte.
vzczc
17

Ich habe es selbst nicht ausprobiert, aber Huagati DBML / EDMX Tools wird von anderen Personen empfohlen.

Huagati DBML / EDMX Tools ist ein Add-In für Visual Studio, das dem Linq2SQL / DBML-Diagrammdesigner in Visual Studio 2008 und dem ADO.NET Entity Framework-Designer in Visual Studio 2008 SP1 Funktionen hinzufügt. Das Add-In fügt neue Menüoptionen zum Aktualisieren von Linq2SQL-Designer-Diagrammen mit Datenbankänderungen, zum Umbenennen von Klassen und Eigenschaften von Linq-to-SQL (DBML) und EF (EDMX) zur Verwendung von .net-Namenskonventionen sowie zum Hinzufügen von Dokumentation / Beschreibungen zu Linq hinzu -to-SQL generierte Klassen aus den Datenbankeigenschaften.

Screenshot der DBML-Tools

Espo
quelle
Zu Ihrer Information: Auf dieser Website ist eine kostenlose 30-Testversion und eine Einzelbenutzer-Lizenzgebühr von etwas mehr als 100 US-Dollar erhältlich.
Dan Esparza
Korrektur, 199 US-Dollar und eine Testversion mit eingeschränkten Funktionen. Ich bin mir nicht sicher, ob es sich lohnt.
Levitikon
8

Hier ist eine einfache Lösung ohne zusätzliche Software, die nur für einfache Änderungen (wie hinzugefügte Felder, wenige Tabellen usw.) funktioniert.

Anleitung:

  • Sie ziehen eine Kopie der geänderten Tabelle in den Designer (wird später entfernt)
  • Wählen Sie nun alle neuen (oder geänderten) Felder und ( right-click ->)copy
  • Klicken insertSie in Ihrer ursprünglichen Tabelle mit der rechten Maustaste darauf (löschen Sie zuerst die geänderten Felder).
  • Löschen Sie nun die Tabelle, aus der Sie sie kopiert haben

Ich weiß, dass es ein bisschen offensichtlich ist, aber irgendwie nicht intuitiv, und es hat mir sehr geholfen, da alle richtigen Attribute und Typen kopiert werden und alle Links intakt bleiben. Ich hoffe es hilft.

Wann zu verwenden:

Natürlich ist es - wie gesagt - für kleine Änderungen, aber sicherlich besser als das manuelle Ersetzen von Tabellen durch viele Links oder wenn Sie nicht möchten, dass Ihre gesamte Datenbankstruktur von SQLMetal generiert wird. Zum Beispiel, wenn Sie eine große Anzahl von Tabellen haben (z. B. SAP) oder wenn Sie vernetzte Tabellen aus verschiedenen Datenbanken verwenden.

Levit
quelle
5

DamienG hat einige t4-Vorlagen geschrieben, die einige der von VS für Sie generierten Vorlagen ersetzen können. Diese können jederzeit über ein Befehlszeilentool erneut ausgeführt werden.

T4-Vorlagen haben den zusätzlichen Vorteil, dass sie bearbeitet werden können. Auf diese Weise können Sie optimieren, was nach Herzenslust generiert wird.

Rory Becker
quelle
4

Ich denke, Jeff hat sich kürzlich darüber beschwert. Eine übliche Technik besteht darin, alle Objekte erneut in den Designer zu ziehen ...

Ich hoffe, jemand anderes mischt sich mit einem besseren Ansatz ein!

Michael Haren
quelle
Das machen wir ... und es wird langsam sehr nervig! :-)
Richard Ev
0

Wie wäre es mit dem Ändern der Eigenschaften der Entität / Tabelle in der DataContext-Entwurfsoberfläche in Visual Studio?

Zum Beispiel, wenn ich einer SQL Server-Tabelle eine Spalte hinzugefügt habe:

  1. Öffnen Sie die * .dbml-Datei.
  2. Klicken Sie mit der rechten Maustaste auf die Entität und wählen Sie Hinzufügen> Eigenschaft.
  3. Füllen Sie die Werte im Eigenschaftenfenster für die neue Spalte aus.
  4. Erstellen Sie Ihre Lösung.

Die automatisch generierten Modellklassen sollten die neue Spalte widerspiegeln, die hinzugefügt wurde.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Dean
quelle