Die beste Möglichkeit, LINQ to SQL-Klassen nach einer Änderung des Datenbankschemas zu aktualisieren

StackOverflow https://stackoverflow.com/questions/40022

  •  09-06-2019
  •  | 
  •  

Frage

Ich verwende LINQ to SQL-Klassen in einem Projekt, in dem sich das Datenbankdesign noch etwas im Wandel befindet.

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

War es hilfreich?

Lösung

Sie können SQLMetal.exe verwenden, um Ihre dbml- und/oder cs/vb-Datei zu generieren.Verwenden Sie ein vorab erstelltes 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>

Andere Tipps

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

Huagati DBML/EDMX-Tools ist ein Add-In für Visual Studio, das dem LINQ2SQL/DBML-Diagramm-Designer in Visual Studio 2008 und dem ADO.NET-Entitäts-Framework-Designer in Visual Studio 2008 SP1 Funktionen verleiht.Das Add-In fügt neue Menüoptionen zum Aktualisieren von LINQ2SQL-Designer-Diagrammen mit Datenbankänderungen, zum Umbenennen von LINQ-to-SQL-Klassen (DBML) und EF (EDMX) und Eigenschaften zur Verwendung von .NET-Benennungskonventionen sowie zum Hinzufügen von Dokumentationen/Beschreibungen zu LinQ färbt sich um die Umbenennung von LINQ2SQL-Designer-Diagrammen. -TO-SQL generierte Klassen aus den Datenbankeigenschaften.

Screenshot of DBML Tools

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

Anweisungen:

  • 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 aus und (right-click ->) copy
  • Klicken Sie in Ihrer Originaltabelle mit der rechten Maustaste und insert sie (geänderte Felder zuerst löschen)
  • Löschen Sie nun die Tabelle, aus der Sie sie kopiert haben

Ich weiß, es ist irgendwie offensichtlich, 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 geeignet, aber sicherlich besser als das manuelle Ersetzen von Tabellen mit vielen Links oder wenn Sie nicht möchten, dass Ihre gesamte Datenbankstruktur von SQLMetal generiert wird.Wenn Sie beispielsweise eine große Anzahl an Tabellen haben (z. B.SAP) oder bei Verwendung vernetzter Tabellen aus unterschiedlichen Datenbanken.

DamienG hat einige geschrieben t4-Vorlagen Dies kann einen Teil dessen ersetzen, was VS für Sie generiert.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 die generierten Inhalte nach Herzenslust anpassen.

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

Ich hoffe, jemand anderes hat einen besseren Ansatz!

Ich habe ein Tool geschrieben, um Skriptänderungen an Dbml-Skripten vorzunehmen http://code.google.com/p/linqtodbmlrunner/ und mein Blog http://www.adverseconditionals.com

Wie wäre es, wenn Sie die Eigenschaften der Entität/Tabelle innerhalb der DataContext-Designoberfläche in Visual Studio ändern?

Wenn ich beispielsweise 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. Geben Sie im Eigenschaftenfenster die Werte für die neue Spalte ein.
  4. Erstellen Sie Ihre Lösung.

Die automatisch generierten Modellklassen sollten die neu hinzugefügte Spalte widerspiegeln.

enter image description here

enter image description here

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top