Freigeben über


LINQ und ADO.NET

Heute müssen viele Geschäftsentwickler zwei (oder mehr) Programmiersprachen verwenden: eine allgemeine Sprache für die Geschäftslogik- und Präsentationsebenen (z. B. Visual C# oder Visual Basic) und eine Abfragesprache für die Interaktion mit der Datenbank (z. B. Transact-SQL). Dies erfordert, dass der Entwickler in mehreren Sprachen effektiv sein muss, und führt auch zu Sprachkonflikten in der Entwicklungsumgebung. So ergibt es sich z. B., dass eine Anwendung, die zur Ausführung einer Abfrage von Daten aus einer Datenbank eine Datenzugriffs-API verwendet, die Abfrage als Zeichenfolgenliteral angibt, indem sie Anführungszeichen verwendet. Diese Abfragezeichenfolge ist für den Compiler unlesbar und wird nicht auf Fehler überprüft, z. B. ungültige Syntax oder ob die Spalten oder Zeilen, auf die sie verweist, tatsächlich vorhanden sind. Es gibt keine Typüberprüfung der Abfrageparameter und keine IntelliSense Unterstützung.

mit Language-Integrated Abfrage (LINQ) können Entwickler setbasierte Abfragen in ihrem Anwendungscode erstellen, ohne eine separate Abfragesprache verwenden zu müssen. Sie können LINQ-Abfragen für verschiedene aufzählbare Datenquellen schreiben (d. h. eine Datenquelle, die die IEnumerable Schnittstelle implementiert), z. B. Speicherdatenstrukturen, XML-Dokumente, SQL-Datenbanken und DataSet Objekte. Obwohl diese aufzählbaren Datenquellen auf unterschiedliche Weise implementiert werden, machen sie alle die gleiche Syntax und Sprachkonstrukte verfügbar. Da Abfragen in der Programmiersprache selbst gebildet werden können, müssen Sie keine andere Abfragesprache verwenden, die als Zeichenfolgenliterale eingebettet ist, die vom Compiler nicht verstanden oder überprüft werden können. Durch die Integration von Abfragen in die Programmiersprache werden Visual Studio-Programmierer auch in die Lage versetzt, durch Typ- und Syntaxprüfungen zur Kompilierzeit und IntelliSense produktiver zu arbeiten. Diese Features reduzieren die Notwendigkeit für Fehlersuche bei Abfragen und Fehlerbehebung.

Das Übertragen von Daten aus SQL-Tabellen in Objekte im Arbeitsspeicher ist häufig mühsam und fehleranfällig. Der LINQ-Anbieter, der von LINQ to DataSet implementiert wurde, und LINQ to SQL konvertiert die Quelldaten in IEnumerable-basierte Objektsammlungen. Der Programmierer zeigt die Daten immer als IEnumerable Sammlung an, sowohl beim Abfragen als auch beim Aktualisieren. Für das Schreiben von Abfragen für diese Auflistungen steht uneingeschränkte IntelliSense-Unterstützung zur Verfügung.

Es gibt drei separate ADO.NET Language-Integrated Query(LINQ)-Technologien: LINQ to DataSet, LINQ to SQL und LINQ to Entities. LINQ to DataSet bietet eine umfangreichere, optimierte Abfrage über die DataSet UND LINQ to SQL ermöglicht es Ihnen, SQL Server-Datenbankschemas direkt abzufragen, und LINQ to Entities ermöglicht es Ihnen, ein Entity Data Model abzufragen.

Das folgende Diagramm bietet eine Übersicht darüber, wie sich die ADO.NET LINQ-Technologien auf high-level-Programmiersprachen und LINQ-fähige Datenquellen beziehen.

Übersicht über LINQ to ADO.NET

Weitere Informationen zu LINQ finden Sie unter Language Integrated Query (LINQ).

Die folgenden Abschnitte enthalten weitere Informationen zu LINQ to DataSet, LINQ to SQL und LINQ to Entities.

LINQ to DataSet

Dies DataSet ist ein Schlüsselelement des getrennten Programmiermodells, auf dem ADO.NET basiert und häufig verwendet wird. LINQ to DataSet ermöglicht Entwicklern das Erstellen umfangreicherer Abfragefunktionen DataSet mithilfe desselben Abfrageformulierungsmechanismus, der für viele andere Datenquellen verfügbar ist. Weitere Informationen finden Sie unter LINQ to DataSet.

LINQ to SQL

LINQ to SQL ist ein nützliches Tool für Entwickler, die keine Zuordnung zu einem konzeptionellen Modell erfordern. Mithilfe von LINQ to SQL können Sie das LINQ-Programmiermodell direkt über vorhandenes Datenbankschema verwenden. LINQ to SQL ermöglicht Entwicklern das Generieren von .NET Framework-Klassen, die Daten darstellen. Anstatt einem konzeptionellen Datenmodell zuzuordnen, werden diese generierten Klassen direkt datenbanktabellen, Ansichten, gespeicherten Prozeduren und benutzerdefinierten Funktionen zugeordnet.

Mit LINQ to SQL können Entwickler Code direkt mit dem Speicherschema schreiben, indem sie das gleiche LINQ-Programmiermuster wie In-Memory-Auflistungen und die DataSetzusätzlich zu anderen Datenquellen wie XML verwenden. Weitere Informationen finden Sie unter LINQ to SQL.

LINQ to Entities (LINQ für Entitäten)

Die meisten Anwendungen werden derzeit auf relationalen Datenbanken geschrieben. Zu einem bestimmten Zeitpunkt müssen diese Anwendungen mit den daten interagieren, die in einer relationalen Form dargestellt werden. Datenbankschemas eignen sich nicht immer zum Erstellen von Anwendungen, und die konzeptionellen Anwendungsmodelle sind nicht mit den logischen Modellen von Datenbanken identisch. Das Entitätsdatenmodell ist ein konzeptionelles Datenmodell, das zum Modellieren der Daten einer bestimmten Domäne verwendet werden kann, sodass Anwendungen mit Daten als Objekte interagieren können. Weitere Informationen finden Sie unter ADO.NET Entity Framework.

Über das Entity Data Model werden relationale Daten als Objekte in der .NET-Umgebung verfügbar gemacht. Dies macht die Objektebene zu einem idealen Ziel für LINQ-Unterstützung, sodass Entwickler Abfragen für die Datenbank aus der Sprache formulieren können, die zum Erstellen der Geschäftslogik verwendet wird. Diese Funktion wird als LINQ to Entities bezeichnet. Weitere Informationen finden Sie unter LINQ to Entities.

Siehe auch