# 29 LINQ to SQL Nachdem wir uns in den vorangegangenen Kapiteln mit dem Datenzugriff mit ADO.NET beschäftigt haben, wollen wir uns nun LINQ to SQL zuwenden. LINQ to SQL vereinfacht das Arbeiten mit Daten, deren Quelle eine relationale Datenbank ist. Derzeit beschränkt sich LINQ to SQL auf den SQL Server, kann also momentan nicht zusammen mit anderen Datenbankservern benutzt werden. Wie Sie noch sehen werden, vereinfachen sich der Zugriff und auch die Manipulation der Daten mit LINQ to SQL im Vergleich mit ADO.NET drastisch, was Ihnen viele Zeilen Code erspart. ## 29.1 Allgemeine Grundlagen Im Vordergrund steht bei LINQ to SQL das sogenannte Object Relational Mapping (ORM). Bekanntermaßen speichert ein Datenbankserver wie der SQL Server die Daten in Tabellen. Beim Object Relational Mapping werden die Tabellendaten von der Datenbank bezogen und in der Clientanwendung einem Objektmodell zugeordnet. Die datenbeschreibenden Objekte können anschließend von der Anwendung beliebig verarbeitet werden. LINQ to SQL kann nicht nur die empfangenen Daten in Objekte umwandeln. Es hat auch die Fähigkeit, sprachintegrierte LINQ-Abfragen in SQL-Statements zu übersetzen und bei Bedarf die Objekte wieder zurück in relationale Daten zu portieren. Damit ist es möglich, Änderungen, die an den datenbeschreibenden Objekten vorgenommen worden sind, als Aktualisierung in der Datenbank zu speichern. Im Wesentlichen spielen zwei Komponenten bei LINQ to SQL eine wichtige Rolle: die Entitätsklassen die Klasse DataContext Da die relationalen Daten aus einer Datenbank einem Objektmodell zugeordnet werden müssen, muss für jede benötigte Tabelle eine Entitätsklasse geschaffen werden. Eine Instanz der Entitätsklasse beschreibt einen Datensatz und liefert darüber hinaus auch die Metadaten für das LINQ-Abfragemodell. Dazu wird in der Entitätsklasse jede Spalte der Tabelle durch eine Eigenschaft der Entitätsklasse beschrieben. Über ein Attribut werden die Metadaten der Spalte definiert, beispielsweise ob es sich um die Spalte handelt, die den Primärschlüssel der Tabelle beschreibt. Ein anderes Attribut dient der Zuordnung der Klasse zu einer bestimmten Tabelle.