29.5 Tools zur Erzeugung von Entitätsklassen 

Die Beispiele haben bisher eines ganz deutlich gezeigt: Abfragen mit LINQ to SQL sind sehr einfach zu formulieren. Schon an dieser Stelle sei angedeutet, dass die Klasse DataContext ebenfalls sehr einfach einzusetzen ist und viele andere Vorgänge im Zusammenhang mit Datenbankoperationen auf ein Minimum an Programmcode reduziert. Vermutlich werden Sie sich aber dennoch die Frage stellen, ob sich diese Vorteile letztendlich auszahlen, da der Aufwand für die Erstellung einer Entitätsklasse immens hoch ist.
Dazu lässt sich sagen, dass Sie die Entitätsklasse nicht von Hand schreiben müssen. Visual Studio stellt Ihnen zwei Tools zur Verfügung, mit den die Generierung der Entitätsklasse zu einem Kinderspiel wird:
- das Kommandozeilentool SQLMetal
- den O/R-Designer (Object Relational Designer)
Mit Letzterem werden wir uns später in diesem Kapitel noch sehr ausführlich beschäftigen. Beschränken wir uns daher an dieser Stelle auf SQLMetal.
Das Tool »SQLMetal«
Das von LINQ to SQL angebotene Tool unterstützt das Erzeugen von Entitätsklassen direkt aus der Datenbank. Als Ergebnis werden alle Tabellen der Datenbank als Entitätsklassen in C# erstellt. Um die notwendigen Informationen zur Erstellung der Entitätsklassen zu erhalten, ruft SQLMetal die Metadaten der Datenbank ab. Auf deren Basis werden die Datentypen der einzelnen Datenbankfelder und die Beziehungen zwischen den Tabellen ermittelt.
Die Datei SQLMetal.exe finden Sie standardmäßig im Verzeichnis \Programme\Microsoft SDKs\Windows\v6.0A\bin.
Mit den Optionsschaltern des Tools können Sie festlegen, ob Views, gespeicherte Prozeduren oder Funktionen in die Erstellung mit einbezogen werden sollen. Sie können eine XML-Ausgabedatei generieren und zudem optional festlegen, welchem Namespace die Klassen zugeordnet werden sollen.
Das folgende Beispiel generiert die Entitätsklassen der Northwind-Datenbank:
SQLMetal /server:. /database:Northwind /code:C:\NET\NWindEntities.cs /language:csharp
Die Datei, die die in C# erstellten Entitätsklassen enthält, wird unter dem Bezeichner NWindEntities.cs im Verzeichnis C:\NET abgelegt.
Sie können die Ausgabedatei bei Bedarf im Visual Studio ändern – beispielsweise, wenn Sie nicht alle Entitätsklassen benötigen. Zudem können Sie auch die Datenbankfelder in den Klassen auf diejenigen beschränken, auf die Sie tatsächlich in Ihrer Anwendung zugreifen. Erwähnt werden sollte an dieser Stelle auch, dass Sie noch eine Klassendefinition vorfinden, über die wir bisher noch nicht gesprochen haben. Dabei handelt es sich um eine Klasse, die DataContext ableitet. Wir werden auf die abgeleitete DataContext-Klasse im Zusammenhang mit dem O/R-Designer noch zu sprechen kommen.