LINQ to SQL-Tools in Visual Studio

LINQ to SQL war die erste objektrelationale Mappingtechnologie, die von Microsoft veröffentlicht wurde. Sie funktioniert sehr gut in einfachen Szenarios und wird auch in Zukunft in Visual Studio unterstützt, jedoch nicht mehr aktiv weiterentwickelt. LINQ to SQL eignet sich für die Verwaltung von Legacyanwendungen, die diese Technologie bereits verwenden, oder von einfachen Anwendungen, die SQL Server verwenden und keine Mappings von mehreren Tabellen erfordern. Im Allgemeinen sollten neue Anwendungen das Entity Framework verwenden, wenn eine objektrelationale Mapperebene erforderlich ist.

Installieren der LINQ to SQL-Tools

In Visual Studio werden LINQ to SQL-Klassen, die SQL-Tabellen darstellen, mithilfe des objektrelationalen Designers (O/R-Designer) erstellt. Der O/R-Designer ist die Benutzeroberfläche, in der Sie DBML-Dateien bearbeiten können. Für die Bearbeitung von DBML-Dateien mit einer Designeroberfläche sind die LINQ to SQL-Tools erforderlich, die nicht im Lieferumfang der Visual Studio-Workloads enthalten sind.

Wenn Sie die LINQ to SQL-Tools installieren möchten, müssen Sie den Visual Studio-Installer starten, Sie auf Ändern sowie auf die Registerkarte Einzelne Komponenten klicken und in der Kategorie Codetools die Option LINQ to SQL-Tools auswählen.

Was ist der O/R-Designer?

Die Entwurfsoberfläche des O/R-Designers gliedert sich in zwei verschiedene Bereiche: den Entitätenbereich auf der linken Seite und den Methodenbereich auf der rechten. Der Entitätenbereich ist die Hauptentwurfsoberfläche, auf der Entitätsklassen, Zuordnungen und Vererbungshierarchien angezeigt werden. Der Methodenbereich ist die Entwurfsoberfläche, auf der die DataContext-Methoden angezeigt werden, die gespeicherten Prozeduren und Funktionen zugeordnet sind.

Der O/R-Designer stellt eine visuelle Entwurfsoberfläche zum Erstellen von LINQ to SQL-Entitätsklassen und -Zuordnungen (Beziehungen) bereit, die auf Objekten in einer Datenbank basieren. Mit anderen Worten: Der O/R-Designer erstellt innerhalb einer Anwendung ein Objektmodell, das die Objekte in einer Datenbank zuordnet. Außerdem generiert das Modell eine stark typisierte DataContext-Klasse, das Daten an die Entitätsklassen sendet und aus der Datenbank empfängt. Der O/R-Designer stellt auch Funktionen bereit, um gespeicherte Prozeduren und Funktionen zu DataContext-Methoden zuzuordnen, um Daten zurückzugeben und Entitätsklassen aufzufüllen. Abschließend bietet der O/R-Designer die Möglichkeit, Vererbungsbeziehungen zwischen Entitätsklassen zu entwerfen.

Öffnen des O/R-Designers

Klicken Sie zum Hinzufügen eines LINQ to SQL-Entitätsmodells auf Projekt>Neues Element hinzufügen, und wählen Sie dann in der Liste der Projektelemente LINQ to SQL-Klassen aus:

LINQ to SQL-Klassen

Visual Studio erstellt eine .dbml-Datei und fügt sie Ihrer Projektmappe hinzu. Hierbei handelt es sich um die XML-Mappingdatei und die zugehörigen Codedateien.

LINQ to SQL-Klassen im Projektmappen-Explorer

Wenn Sie die .dbml-Datei auswählen, zeigt Visual Studio die Benutzeroberfläche des O/R-Designers an, in der Sie das Modell visuell erstellen können. Die folgende Abbildung zeigt den Designer, nachdem die Northwind-Tabellen Customers und Orders aus dem Server-Explorer gezogen wurden. Beachten Sie die Beziehung zwischen den Tabellen.

LINQ to SQL-Designer

Wichtig

Der O/R-Designer erstellt einfache objektrelationale Mappings, da er nur 1:1-Mappingbeziehungen unterstützt. Das heißt, dass eine Entitätsklasse nur über eine 1:1-Zuordnungsbeziehung zu einer Datenbanktabelle oder -ansicht verfügen kann. Komplexe Mappings, z. B. das Mapping einer Entitätsklasse zu einer verknüpften Tabelle, werden nicht unterstützt. Für komplexe Mappings müssen Sie das Entity Framework verwenden. Darüber hinaus ist der Designer ein unidirektionaler Code-Generator. Das bedeutet, dass in der Codedatei nur Änderungen der Designeroberfläche wiedergegeben werden. Manuelle Änderungen der Codedatei werden nicht im O/R-Designer angezeigt. In der Codedatei vorgenommene manuelle Änderungen werden überschrieben, wenn der Designer gespeichert und Code erneut generiert wird. Weitere Informationen zum Hinzufügen von Benutzercode und zum Erweitern der vom O/R-Designer generierten Klassen finden Sie unter Vorgehensweise: Erweitern von mit dem O/R-Designer erstelltem Code.

Erstellen und Konfigurieren von DataContext

Nachdem Sie einem Projekt ein Element aus LINQ to SQL-Klassen hinzugefügt und den O/R-Designer geöffnet haben, stellt die leere Entwurfsoberfläche eine leere DataContext-Klasse dar, das konfiguriert werden soll. Die Klasse DataContext wird mithilfe der Verbindungsinformationen des ersten Elements konfiguriert, das auf die Entwurfsoberfläche gezogen wird. Deshalb wird die Klasse DataContext mithilfe der Verbindungsinformationen des ersten Elements konfiguriert, das auf der Entwurfsoberfläche abgelegt wird. Weitere Informationen zur Klasse DataContext finden Sie unter DataContext-Methoden (O/R-Designer).

Erstellen von Entitätsklassen für Mappings zwischen Datenbanktabellen und -sichten

Sie können Entitätsklassen erstellen, die Tabellen und Sichten zugeordnet sind, indem Sie Datenbanktabellen und -sichten aus dem Server-Explorer oder Datenbank-Explorer in den O/R-Designer ziehen. Wie im vorherigen Abschnitt angegeben, wird die Klasse DataContext mithilfe der Verbindungsinformationen des ersten Elements konfiguriert, das auf die Entwurfsoberfläche gezogen wird. Wenn ein nachfolgendes Element mit einer anderen Verbindung dem O/R-Designer hinzugefügt wird, können Sie die Verbindung für DataContext ändern. Weitere Informationen finden Sie unter Vorgehensweise: Erstellen von LINQ to SQL-Klassen, die Tabellen und Ansichten zugeordnet sind (O/R-Designer).

Erstellen von DataContext-Methoden zum Aufrufen von gespeicherten Prozeduren und Funktionen

Sie können DataContext-Methoden erstellen, die gespeicherte Prozeduren und Funktionen aufrufen (ihnen zugeordnet sind), indem Sie diese aus dem Server-Explorer oder dem Datenbank-Explorer in den O/R-Designer ziehen. Gespeicherte Prozeduren und Funktionen werden dem O/R-Designer als Methoden von DataContext hinzugefügt.

Hinweis

Wenn Sie gespeicherte Prozeduren und Funktionen aus dem Server-Explorer oder Datenbank-Explorer in den O/R-Designer ziehen, unterscheidet sich der Rückgabetyp der generierten DataContext-Methode je nach dem Ablageort des Elements. Weitere Informationen finden Sie unter DataContext-Methoden (O/R-Designer).

Konfigurieren von DataContext zum Speichern von Daten zwischen Entitätsklassen und einer Datenbank mithilfe von gespeicherten Prozeduren

Wie bereits angemerkt wurde, können DataContext-Methoden erstellt werden, die gespeicherte Prozeduren und Funktionen aufrufen. Zudem können auch gespeicherte Prozeduren zuordnen, die für das LINQ to SQL-Standardlaufzeitverhalten verwendet werden, das Einfüge-, Update- und Löschvorgänge ausführt. Weitere Informationen finden Sie unter Vorgehensweise: Zuweisen von gespeicherten Prozeduren zum Durchführen von Aktionen zum Aktualisieren, Einfügen und Löschen (O/R-Designer).

Vererbung und der O/R-Designer

Wie andere Objekte auch können LINQ to SQL-Klassen vererben und von anderen Klassen abgeleitet werden. Vererbungsbeziehungen werden in einer Datenbank auf verschiedene Arten erstellt. Der O/R-Designer unterstützt das häufig in relationalen Systemen implementierte Konzept der Einzeltabellenvererbung (Single-Table Inheritance). Weitere Informationen finden Sie unter Vorgehensweise: Configure inheritance by using the O/R Designer (Vorgehensweise: Konfigurieren der Vererbung mit dem O/R-Designer).

LINQ to SQL-Abfragen

Die vom O/R-Designer erstellten Entitätsklassen sind für die Language Integrated Query-Syntax (LINQ) konzipiert. Weitere Informationen finden Sie unter Vorgehensweise: Abfragen von Informationen.

Trennen des erstellten DataContext- und Entitätsklassencodes in verschiedene Namespaces

Der O/R-Designer stellt die Eigenschaften Kontextnamespace und Entitätsnamespace für DataContext bereit. Mit diesen Eigenschaften wird festgelegt in welchen Namespace der DataContext und der Entitätsklassencode generiert werden. Standardmäßig sind diese Eigenschaften leer, und der DataContext und die Entitätsklassen werden in den Namespace der Anwendung generiert. Geben Sie einen Wert in die Eigenschaften Context Namespace und/oder Entity Namespace ein, um den Code in einem anderen Namespace als dem der Anwendung zu generieren.

Referenzinhalt

Weitere Informationen