Ich habe dieses raffinierte LINQ to SQL-Tool für eine Datenzugriffsschicht in einem asp.net-Projekt verwendet. Ich mache weiterhin Änderungen an den zugrunde liegenden Tabellen und damit die Datenklassen die Änderung erkennen, muss ich die geänderte Tabelle löschen und neu einlesen. Gibt es eine Verknüpfung zum Regenerieren der Datenschicht?Linq zu SQL Class Regeneration
Antwort
Ich habe in das gleiche Problem gerannt und mit sqlmetal ist definitiv ein guter Weg, um es zu lösen. Ein Ansatz besteht darin, eine Batch-Datei zu erstellen, die Ihren sqlmetal-Befehl ausführt. Auf diese Weise können Sie den Batch jederzeit ausführen, wenn Sie Ihre Linq-SQL-Klassen aktualisieren müssen. Eine noch bessere Lösung besteht jedoch in der Verwendung von Visual Studio Erstellen Sie einen Befehl in Visual Studio, der sqlmetal mit Ihren Parametern ausführt. Das funktioniert gut und Sie können den erstellten Befehl sogar auf die Symbolleiste für den Einzelklick-Wiederaufbau ablegen.
Sie könnten sqlmetal verwenden, das der Befehlszeilenklassengenerator für linq to sql classes ist.
Für Situationen/Modelle, in denen SQLMetal nicht ganz schneiden, z. Aufgrund unterschiedlicher Namenskonventionen in der Datenbank und Ihres Modells oder anderer Anpassungen in Ihrem L2S-Modell habe ich ein Add-In für Visual Studio, das Befehle zur Synchronisierung Ihres L2S-Designers mit der zugrunde liegenden Datenbank [schema] hinzufügt. (Plus ein paar andere L2S und EF bezogene Funktionen)
Sie mehr darüber lesen können, laden Sie es und eine 30-Tage-Testlizenz von http://www.huagati.com/dbmltools/
LINQ to SQL-Version 1 unterstützt nicht die Datenbankschema Erkennung Änderungen. Die generierten Klassen können nur geändert werden, indem sie entweder mit dem Designer oder mit SQLMetal neu generiert werden.
Denken Sie daran, dass es nicht viele Unterschiede zwischen SQLMetal und dem Designer gibt, der Designer ist eine "hübschere" Benutzeroberfläche für SQLMetal und verbirgt viele der Befehlszeilenoptionen.
Ich benutze den Designer, da ich zu faul bin, um die Eingabeaufforderung ständig zu laden.
Stellen Sie außerdem sicher, dass Sie keinen eigenen Code in die generierten Klassen schreiben, sonst verlieren Sie ihn bei einer Regenerierung. Alle generierten Klassen sind teilweise was bedeutet, dass Sie einfach Ihre eigenen Extender in einer separaten Datei hinzufügen können.
In der Vergangenheit, wo ich gearbeitet habe, haben wir eine Wrapper-Klasse für den DataContext erstellt, die sqlmetal generiert. Dann haben wir eine dünne Datenschicht erstellt, die den DataContext und alle von sqlmetal generierten Klassen privat hält.
Wenn irgendwelche Operationen in der Software Informationen aus der Datenbank benötigten, mussten sie diese Wrapper-Ebene durchlaufen, um sie zu bekommen. Mit anderen Worten, kein LINQ to SQL könnte außerhalb dieser Datenschicht erscheinen.
Auf diese Weise konnten immer nur Teile der Datenschicht brechen, wenn wir Klassen über sqlmetal neu generieren mussten. Es ist viel einfacher, eine Ebene zu fixieren, auf der sich der gesamte Datenzugriffscode befindet, als LINQ to SQL in Ihrer Logik- oder Anwendungsdomäne zu ändern.
Wie kann ich meine faulen geladenen Eigenschaften behalten? Ich meine, wenn ich das Modell mit sqlmetal regeneriere, verliere ich die FK-Eigenschaften, die ich eingestellt habe, um lazy geladen zu werden. Gibt es eine Möglichkeit, sie zu behalten? Vielen Dank! – emzero