LINQ to SQL - Flexibler durch manuelles Mapping

by Gregor Biswanger 19. August 2008 10:23

Seit dem neuen Visual Studio 2008 und dem .NET Framework 3.5 stellt Microsoft die neue LINQ Technologie zur Verfügung. Durch den dazugehörigen Designer, kann mit LINQ to SQL spielend leicht ein Objekt aus der Datenbank erzeugt werden.Doch leider haben die Designer immer dieselben Nachteile. Sie grenzen die Flexibilität stark ein, Sie ist bei der .NET-Softwarearchitektur unabdingbar. Jede Schicht muss weiterhin auf die LINQ to SQL Objekte zugreifen können ohne direkt mit der Datenbankschicht verbunden zu sein. Bisher gab es bereits kostenlose Lösungen, die ein O/R Mapping mit viel Flexibilität anbieten. Eines der Führenden war NHibernate,doch wird ständig nach einer Möglichkeit gesucht, NHibernate wie LINQ zu nutzen oder via LINQ anzusprechen. Es müsste also ein fertiges LINQ to SQL-Objekt in die Contract-Schicht, damit alle Schichten Zugriff bekommen. Allerdings muss das unabhängig ohne Designer geschehen, damit wir eigene Objekte nach Wunsch erzeugen können. Auch die Datenübertragung muss erst von der DataAccessLayer geschehen. Es hilft uns also nur noch die LINQ to SQL Objekte manuell zu erzeugen, um unabhängig das Objekt von der Datenbankschicht verwenden zu können.

Flexibles Mapping beliebter Objekte

Als Beispiel wurde die Musterdatenbank Northwind für den SQL Server 2008 eingesetzt. Dafür eignet sich die Tabelle "Customers" bestens. Der Aufbau und die Typen der Tabelle sieht man bei Abb.1.

Abb. 1: Der Aufbau der Tabelle "Customers"

Anschließend wird für das Projekt unter der Contract-Schicht eine Datenklasse angelegt, die alle Felder der Tabelle als Eigenschaften abbildet. (Siehe Abb.2)

 

Abb. 2: Die Datenklasse "Customer" bildet die Felder als Eigenschaften ab.

Um Customer nun manuell zu Mappen muss die Library "System.Data.Linq.Mapping" eingebunden und der Namespace mittels Using eingesetzt werden. Nun stehen der Klasse neue Attribute zur Verfügung. Mit [Table] für die Datenbanktabelle und [Column] als Feld der Tabelle, wird LINQ der Verweis manuell gekennzeichnet. Die Attribute verfügen noch weitere Interessante Optionen. Wenn der Klassen- oder Methodenname nicht dem Namen der Datenbanktabelle entspricht, kann durch "[Table(Name = "Costumers")]", die Verknüpfung zum korrekten Feld angegeben werden. Um eine bessere Übersicht zu erhalten, die Datenklasse "Customer" von Abb.2 erweitert durch Attributen unter Abb.3.

Abb. 3: Die Datenklasse "Customer" mit manuellen LINQ Attributen.

Microsoft bezeichnet diese Art des Mapping "Attribute-Based Mapping". Weitere Optionen die bei den Attributen zur Verfügung stehen, können unter folgenden Link nachgelesen werden: http://msdn.microsoft.com/en-us/bb386971.aspx

Nun wird in der DataAccessLayer ein DataContext mit ConnectionString erzeugt, dann übermittelt "GetTable<>()" die Datenklasse "Customer" die Zuweisung für DataContext. Der Rest folgt wie gewohnt von LINQ. Als Beispiel um einen Datensatz zu speichern, siehe Abb 4.

Abb. 4: Das Abspeichern von Daten in die Datenbank.

Desweiteren auch noch Beispiele um Daten zu lesen (Abb.5), Updaten (Abb.6) und löschen(Abb.7).

Abb. 5: Das Lesen von der Datenbank.

Abb. 6: Das Updaten von Daten in die Datenbank.

Abb. 7: Das Löschen von Daten in der Datenbank.



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)