Um in eine Datenbank zu Schreiben bzw. aus dieser zu Lesen bietet das .NET Framwork 3.5 die „LINQ to SQL“ Technologie. Im Gegensatz zur Vorgängertechnologie ADO.NET, bei der Datenbank-Commands für den SQL Server ausschließlich als Zeichenketten im Quellcode gespeichert werden, verfügt LINQ über den Vorteil der Implementierung in die .NET-Programmiersprache (LINQ = Language INtegrated Query). Einerseits steht dem Entwickler damit Typsicherheit auch in Datenabfragen zu Verfügung, zum anderen wird er, da die Abfrage wie normaler Quellcode im Editor seiner Programmiersprache formuliert wird, durch IntelliSense unterstützt - um nur zwei der vielen Vorteile von LINQ erwähnen.
Mithilfe von Visual Studio 2008 ab der Professional Edition besteht die Möglichkeit, über den Serverexplorer ein LINQ-Objektmodel aus einer „klassischen“ SQL-Datenbank zu generieren. Für einige Anwendungsszenarien, die Daten nur lokal speichern müssen, ist der Einsatz von SQL Server oftmals aber ein Overkill, quasi mit Kanonen auf Spatzen geschossen. Der Einsatz einer Compact Database bietet hier unter Umständen einige Vorteile: Compact Databases sind zwar lange nicht so ausfallsicher, aber dadurch, dass sie wie etwa Microsoft Access-Datenbanken, ausschließlich dateibasiert verwendet und nicht fest mir einer SQL Server-Instanz "verdrahtet" werden müssen, für Insellösungen oftmals flexibler und vor allem einfacher zu administrieren.
Die Benutzeroberfläche von Visual Studio 2008 sieht es leider standardmäßig nicht vor, ein Objektmodell für die Verwendung mit LINQ aus einer Compact Database zu erstellen. Doch das bedeutet nicht, dass LINQ mit Compact Databases nicht möglich ist. Es gibt die Option, das Werkzeug "SQL-Metal", das die Codegenerierung für ein LINQ to SQL-Objektmodell handelt, auch direkt anzusteuern, und wenn mann auf die Visual Studio IDE zu diesem Zweck verzichtet, dann klappt's auch mit Compact Databases.
Um ein LINQ-Datenobjektmodel für eine Microsoft SQL Server Compact Database zu generieren gehen sie wie folgt vor:
Schritt 1:
Kopieren Sie die bestehende Compact-Datenbank (mit der Dateiendung .sdf) in ihr Projektverzeichnis.
Schritt 2:
Kopieren Sie das Tool „SqlMetal.exe“, sowie die dazugehörige Konfigurationsdatei „SqlMetal.exe.config“ ebenfalls in ihr Projektverzeichnis.
Dieses befindet sich in folgendem Dateipfad: C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\SqlMetal.exe
Schritt 3:
Klicken Sie im Projektmappen-Explorer im Visual Studio 2008 auf das Symbol „Alle Dateien anzeigen“
|

|
Abbildung 1: Alle Dateien anzeigen
|
Jetzt wird in der Projektmappe auch die Compact-Datenbankdatei (Abbildung 2: Das Datenbankobjektmodell zur Projektmappe hinzufügen) angezeigt.
Schritt 4:
Mit einem Rechtsklick auf die Compactdatenbankdatei „OfflineLegatro.sdf“ erscheint ein Kontextmenü. In diesem Menü wählen Sie „Zu Projekt hinzufügen“.
Jetzt öffnet sich ein Assistent zum Konfigurieren von Datenquellen. Dieser dient dem Erstellen von DataSets. Diesen Assistenten können Sie einfach abbrechen. Nun ist die Datenbank in die Projektmappe integriert.
Schritt 5:
Starten Sie die Windows Eingabeaufforderung und wechseln in das Verzeichnis, in das Sie zuvor das Tool „SqlMetal.exe“ kopiert habe. Dort rufen Sie es mit folgender Codezeile auf:
SqlMetal.exe OfflineLegatro.sdf /dbml:LegatroOffline.dbml /namespace:LegatroOffline /pluralize
Nun ist aus der Compactdatenbankdatei „OfflineLegatro.sdf“ ein Datenbankobjektmodell mit dem Namen “LegatroOffline.dbml” im Namespace „LegatroOffline“ erstellt worden.
Schritt 6:
|

|
Abbildung 2: Das Datenbankobjektmodell zur Projektmappe hinzufügen
|
Durch das Klicken auf das „Aktualisieren“ Symbol im Projektmappenexplorer wird nun auch die „LegatroOffline.dbml“-Datei angezeigt. Dieses ist das Datenbankobjektmodell. Klicken Sie mit der rechten Maustaste auf diese Datei. Es erscheint ein Kontextmenü, indem Sie den Befehl „Zu Projekt hinzufügen“ ausführen. Nun ist das Datenbankobjektmodel in das Projekt integriert.
Durch einen Doppelklick auf die „LegatroOffline.dbml“-Datei bekommen Sie eine grafische Ansicht über das komplette Datenbankobjektmodel. Nun ist die Datenbank als Objektmodel in das Projekt integriert und kann zur Programmierung verwendet werden.