Auf der VSone habe ich das erste mal von den SQL Server in der Compact Edition (Version 3.5 ist momentan aktuell) gehört. In dem dazugehörigen Blogeintrag habe ich bereits einige der wichtigsten Angaben zu dem SQL Server Compact Edition geschrieben.
Kurzzusammenfassung:
- SQL DB für bis zu 4 GB Daten
- Bekannte Tools nutzbar
- Benötigt keine Installation etc.
- Relationen sind einstellbar
Kleines Problem: Geht LINQ to SQL?
Wer einmal mit LINQ to SQL gearbeitet hat, wird es sicherlich schick finden - jedenfalls schicker als das normale ADO.NET Thema. Wenn man das allerdings ausprobiert, bekommt man eine Fehlermeldung:
Erstmal die Entwarnung: Es geht - mit einem kleinen Trick.
Doch langsam: Vorbereitung
Als erstes benötigen wir eine "Local Database":
Diese SQL Server Compact Edition Database erkennt man an der "sdf" Endung. Nachdem wir dies gemacht haben, kommt so ein Dataset Dialog - den einfach ignorieren und schließen.
Jetzt legen wir unsere Tabellen an - der Dialog ist ähnlich wie beim SQL Management Studio:
Nachdem wir nun eine Company Tabelle ("Id" = Guid, "Name" = nvarchar) & Employee ("Id" = Guid, "Firstname" = nvarchar, "Lastname" = nvarchar, "CompanyId" = Guid) können wir über ein Kontextmenü die Verknüpfung zwischen den beiden Tabellen einstellen:
Das entsprechende Menü:
Nachdem wir das haben, kommen wir nun zum eigentlichen Teil:
LINQ to SQL einsetzen
Bei einer normalen MDF oder einer SQL Server Tabelle kann man den Designer nehmen, allerdings ist dies momentan bei einer Compact Edition DB nicht möglich.
Allerdings gibt es ein kleines Tool namens "SQLMetal.exe", welches normalerweise unter diesem Pfad zu finden ist:
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
Die Datei "SQLMetal.exe" sowie die Config Datei habe ich einfach mit in mein Projektverzeichnis kopiert.
Danach wird es wie folgt aufgerufen:
SqlMetal.exe Database.sdf /dbml:Enterprise.dbml /namespace:SQLCompact /pluralize
Folgendes passiert: Die Database.sdf wird aufgerufen und es wird eine Enterprise.dbml erstellt - im Namespace "SQLCompact".
DBML dem Projekt hinzufügen
Damit man es im Projekt nutzen kann, muss man es noch einblenden:
... und am Ende sieht man sowas:
Müsste eigentlich bekannt vorkommen, oder? ;)
Update aus den Kommentaren: Es wird keine designer.cs Datei angelegt
Die Lösung wurde von David in diesen Stackoverflow Thread gefunden. Um die Designer.cs auch erzeugen zu lassen muss man unter den Eigenschaften der DBML-Datei "MSLinqToSQLGenerator” in die Eigenschaft "Benutzerdefiniertes Tool”/”Custom Tool” eintragen. Vielen Dank an den Hinweis an David.
Beispiel: Datensatz einfügen
Der Datacontext kann entweder über die verschiedenen Parameter anders benannt werden oder ist im Standardfall gleich mit dem sdf Namen. Sodass wir nun mit dem Code eine neue Firma einfügen können:
Also alles nix neues - der Connectionstring kann vom Serverexplorer unter "Eigenschaften" ausgelesen werden oder von dieser Website.
Jetzt können wir alles anwenden, was wir z.B. hier oder hier kennengelernt haben.
Hier gibts noch ein paar LINQ Informationen.
Viel Spaß :)