Delen via


LINQ en ADO.NET

Tegenwoordig moeten veel zakelijke ontwikkelaars twee (of meer) programmeertalen gebruiken: een taal op hoog niveau voor de bedrijfslogica en presentatielagen (zoals Visual C# of Visual Basic) en een querytaal om te communiceren met de database (zoals Transact-SQL). Dit vereist dat de ontwikkelaar in verschillende talen effectief is en zorgt er ook voor dat de taal niet overeenkomt in de ontwikkelomgeving. Een toepassing die gebruikmaakt van een API voor gegevenstoegang om een query uit te voeren op een database, geeft bijvoorbeeld de query op als letterlijke tekenreeks met aanhalingstekens. Deze querytekenreeks is onleesbaar voor de compiler en wordt niet gecontroleerd op fouten, zoals ongeldige syntaxis of of de kolommen of rijen die deze daadwerkelijk verwijst, bestaan. Er is ook geen typecontrole van de queryparameters en geen IntelliSense ondersteuning.

Met Language-Integrated Query (LINQ) kunnen ontwikkelaars op basis van setquery's in hun toepassingscode query's maken zonder dat ze een afzonderlijke querytaal hoeven te gebruiken. U kunt LINQ-query's schrijven op verschillende enumerable gegevensbronnen (dat wil gezegd een gegevensbron die de IEnumerable interface implementeert), zoals in-memory gegevensstructuren, XML-documenten, SQL-databases en DataSet -objecten. Hoewel deze enumerable gegevensbronnen op verschillende manieren worden geïmplementeerd, maken ze allemaal dezelfde syntaxis en taalconstructies beschikbaar. Omdat query's kunnen worden gevormd in de programmeertaal zelf, hoeft u geen andere querytaal te gebruiken die is ingesloten als letterlijke tekenreeksen die niet kunnen worden begrepen of geverifieerd door de compiler. Door query's te integreren in de programmeertaal kunnen Visual Studio-programmeurs ook productiever zijn door compileertijd en syntaxiscontrole te bieden, en IntelliSense. Deze functies verminderen de noodzaak voor queryfoutopsporing en foutopsporing.

Het overdragen van gegevens uit SQL-tabellen naar objecten in het geheugen is vaak tijdrovend en foutgevoelig. De LINQ-provider die door LINQ is geïmplementeerd in DataSet en LINQ naar SQL, converteert de brongegevens naar IEnumerableop basis van objectverzamelingen. De programmeur bekijkt altijd de gegevens als een IEnumerable verzameling, zowel wanneer u een query uitvoert als wanneer u bijwerkt. Er wordt volledige IntelliSense ondersteuning geboden voor het schrijven van query's voor deze verzamelingen.

Er zijn drie afzonderlijke ADO.NET LINQ-technologieën (Language-Integrated Query): LINQ naar DataSet, LINQ naar SQL en LINQ naar entiteiten. LINQ naar DataSet biedt uitgebreidere, geoptimaliseerde query's via de DataSet LINQ naar SQL, zodat u rechtstreeks query's kunt uitvoeren op SQL Server-databaseschema's en LINQ naar entiteiten kunt u een query uitvoeren op een Entiteitsgegevensmodel.

In het volgende diagram ziet u een overzicht van de relatie tussen de ADO.NET LINQ-technologieën en programmeertalen op hoog niveau en gegevensbronnen met LINQ-functionaliteit.

LINQ to ADO.NET overview

Zie Language Integrated Query (LINQ) voor meer informatie over LINQ.

In de volgende secties vindt u meer informatie over LINQ naar DataSet, LINQ naar SQL en LINQ naar entiteiten.

LINQ naar DataSet

Het DataSet is een belangrijk element van het niet-verbonden programmeermodel waarop ADO.NET is gebouwd en wordt veel gebruikt. LINQ naar DataSet stelt ontwikkelaars in staat om uitgebreidere querymogelijkheden DataSet in te bouwen met behulp van hetzelfde queryformuleringsmechanisme dat beschikbaar is voor veel andere gegevensbronnen. Zie LINQ naar DataSet voor meer informatie.

LINQ naar SQL

LINQ naar SQL is een handig hulpmiddel voor ontwikkelaars die geen toewijzing aan een conceptueel model vereisen. Met LINQ naar SQL kunt u het LINQ-programmeermodel rechtstreeks via een bestaand databaseschema gebruiken. MET LINQ naar SQL kunnen ontwikkelaars .NET Framework-klassen genereren die gegevens vertegenwoordigen. In plaats van een conceptueel gegevensmodel toe te wijzen, worden deze gegenereerde klassen rechtstreeks toegewezen aan databasetabellen, weergaven, opgeslagen procedures en door de gebruiker gedefinieerde functies.

Met LINQ naar SQL kunnen ontwikkelaars code rechtstreeks schrijven op basis van het opslagschema met hetzelfde LINQ-programmeerpatroon als in-memory verzamelingen en de DataSet, naast andere gegevensbronnen zoals XML. Zie LINQ naar SQL voor meer informatie.

LINQ naar entiteiten

De meeste toepassingen worden momenteel op relationele databases geschreven. Op een bepaald moment moeten deze toepassingen communiceren met de gegevens die in een relationele vorm worden weergegeven. Databaseschema's zijn niet altijd ideaal voor het bouwen van toepassingen en de conceptuele toepassingsmodellen zijn niet hetzelfde als de logische modellen van databases. Het Entiteitsgegevensmodel is een conceptueel gegevensmodel dat kan worden gebruikt om de gegevens van een bepaald domein te modelleren, zodat toepassingen kunnen communiceren met gegevens als objecten. Zie ADO.NET Entity Framework voor meer informatie.

Via het Entiteitsgegevensmodel worden relationele gegevens weergegeven als objecten in de .NET-omgeving. Hierdoor is de objectlaag een ideaal doel voor LINQ-ondersteuning, zodat ontwikkelaars query's kunnen formuleren op basis van de database uit de taal die wordt gebruikt om de bedrijfslogica te bouwen. Deze mogelijkheid staat bekend als LINQ naar entiteiten. Zie LINQ naar entiteiten voor meer informatie.

Zie ook