LINQ et ADO.NET
Aujourd’hui, de nombreux développeurs d’entreprise doivent utiliser au moins deux langages de programmation : un langage de haut niveau pour la logique métier et les couches de présentation (tel que Visual C# ou Visual Basic), et un langage de requête pour interagir avec la base de données (tel que Transact-SQL). Pour être efficace, le développeur doit être expert en plusieurs langages, et cela peut entraîner des incompatibilités dans l'environnement de développement. Par exemple, une application qui utilise une API d'accès aux données pour exécuter une requête sur une base de données spécifie la requête comme un littéral de chaîne en utilisant des guillemets. Cette chaîne de requête est illisible pour le compilateur, et ne fait l’objet d’aucun contrôle d’erreur pour vérifier sa syntaxe ou l’existence des colonnes ou lignes auxquelles elle fait référence. Il n'y a aucune vérification de type des paramètres de requête et aucune prise en charge IntelliSense
.
LINQ (Language Integrated Query) permet aux développeurs de former des requêtes basées reposant sur un jeu dans leur code d’application, sans avoir à utiliser un langage de requête séparé. Vous pouvez écrire des requêtes LINQ sur diverses sources de données énumérables (c’est-à-dire des sources de données implémentant l’interface IEnumerable), comme des structures de données en mémoire, des documents XML, des bases de données SQL et des objets DataSet. Bien que ces sources de données énumérables soient implémentées de diverses manières, elles exposent toutes la même syntaxe et les mêmes constructions de langage. Parce que les requêtes peuvent être formées à même le langage de programmation, vous n'avez pas à utiliser un autre langage de requêtes intégré en tant que littéraux de chaîne et qui ne peut pas être compris ou vérifié par le compilateur. L’intégration des requêtes dans le langage de programmation permet également aux programmeurs Visual Studio d’être plus productifs en leur fournissant la vérification de type et de syntaxe au moment de la compilation, et IntelliSense
. Ces fonctionnalités réduisent la nécessité du débogage de requête et de la résolution d'erreur.
Le transfert des données à partir des tables SQL dans des objets en mémoire est souvent fastidieux et susceptible d'engendrer des erreurs. Le fournisseur LINQ implémenté par LINQ to DataSet et LINQ to SQL convertit les données sources en collections d’objets basées sur IEnumerable. Le programmeur consulte toujours les données comme une collection IEnumerable, lors de l’interrogation et de la mise à jour. La prise en charge complète de IntelliSense
est fournie pour l'écriture de requêtes sur ces collections.
Il existe trois technologies LINQ (Language Integrated Query) ADO.NET distinctes : LINQ to DataSet, LINQ to SQL et LINQ to Entities. LINQ to DataSet assure une interrogation plus riche et optimisée du DataSet, LINQ to SQL vous permet d’interroger directement des schémas de base de données SQL Server, et LINQ to Entities vous permet d’interroger un EDM (Entity Data Model).
Le diagramme suivant donne un aperçu de la relation des technologies ADO.NET LINQ avec les langages de programmation de haut niveau et les sources de données prenant en charge LINQ.
Pour plus d’informations sur LINQ, consultez LINQ (Language Integrated Query).
Les sections suivantes fournissent plus d’informations sur LINQ to DataSet, LINQ to SQL et LINQ to Entities.
LINQ to DataSet
Le DataSet est un élément clé du modèle de programmation déconnecté sur lequel est construit ADO.NET, et il est largement utilisé. LINQ to DataSet permet aux développeurs de générer des fonctionnalités de requête plus complètes dans DataSet en utilisant le même mécanisme de formulation de requête que celui disponible pour de nombreuses autres sources de données. Pour plus d’informations, consultez LINQ to DataSet.
LINQ to SQL
LINQ to SQL est un outil utile pour les développeurs qui n’ont pas besoin d’effectuer de mappage à un modèle conceptuel. LINQ to SQL vous permet d’utiliser directement le modèle de programmation LINQ sur un schéma de base de données existant. LINQ to SQL permet aux développeurs de générer des classes .NET Framework qui représentent des données. Plutôt que d'effectuer un mappage à un modèle conceptuel de données, ces classes générées effectuent un mappage direct aux tables de données, vues, procédures stockées et fonctions définies par l'utilisateur.
Avec LINQ to SQL, les développeurs peuvent écrire directement du code par rapport au modèle de stockage en utilisant le même modèle de programmation LINQ que dans les collections en mémoire et le DataSet, en plus d’autres sources de données telles que XML. Pour plus d’informations, consultez LINQ to SQL.
LINQ to Entities
La plupart des applications de gestion actuellement écrites reposent sur des bases de données relationnelles. À un certain stade, ces applications doivent interagir avec les données représentées sous forme relationnelle. Les schémas de base de données ne sont pas toujours adaptés à la création d'applications et les modèles conceptuels d'application sont différents des modèles logiques de base de données. L’Entity Data Model est un modèle conceptuel de données pouvant être utilisé pour modéliser les données d’un domaine particulier de sorte que des applications puissent interagir avec les données comme avec des objets. Pour plus d’informations, consultez ADO.NET Entity Framework.
Via l’Entity Data Model, les données relationnelles sont exposées comme objets dans l'environnement .NET. Cela fait de la couche objet une cible idéale pour la prise en charge de LINQ, permettant aux développeurs de formuler des requêtes sur la base de données à partir du langage utilisé pour générer la logique métier. Cette capacité est appelée LINQ to Entities. Pour plus d’informations, consultez LINQ to Entities.