Outils LINQ to SQL dans Visual Studio
LINQ to SQL était la première technologie de mappage relationnel objet publiée par Microsoft. Il fonctionne bien dans les scénarios de base et continue d’être pris en charge dans Visual Studio, mais il n’est plus en cours de développement actif. Utilisez LINQ to SQL lors de la maintenance d’une application héritée qui l’utilise déjà, ou dans des applications simples qui utilisent SQL Server et qui ne nécessitent pas de mappage à plusieurs tables. En règle générale, les nouvelles applications doivent utiliser Entity Framework lorsqu’une couche de mappage relationnelle d’objet est requise.
Installer les outils LINQ to SQL
Dans Visual Studio, vous créez des classes LINQ to SQL qui représentent des tables SQL à l’aide du concepteur relationnel d’objet (concepteur O/R). Le concepteur O/R est l’interface utilisateur permettant de modifier les fichiers .dbml
. La modification des fichiers .dbml
avec une surface de concepteur requiert les outils LINQ to SQL qui ne sont installés par défaut dans aucune des charges de travail de Visual Studio.
Pour installer les outils LINQ to SQL, démarrez le programme d’installation de Visual Studio, choisissez Modifier, puis sélectionnez l’onglet Composants individuels, puis sélectionnez outils LINQ to SQL sous la catégorie Outils de code.
Présentation du concepteur O/R
Le concepteur O/R a deux zones distinctes sur son aire de conception : le volet entités à gauche et le volet méthodes à droite. Le volet Entités est l’aire de conception principale qui affiche les hiérarchies d’entités, les associations et les hiérarchies d’héritage. Le volet méthodes est la surface de conception qui affiche les méthodes DataContext associées aux procédures stockées et aux fonctions.
Le Concepteur O/R fournit une surface de conception visuelle pour créer les classes d’entité LINQ to SQL et les associations (relations) qui sont basées sur des objets dans une base de données. En d'autres termes, le concepteur O/R crée un modèle objet dans une application qui correspond aux objets dans une base de données. Il génère également un DataContext fortement typé qui envoie et reçoit des données entre les classes d’entité et la base de données. Le concepteur O/R fournit également des fonctionnalités permettant de mapper des procédures stockées et des fonctions à des méthodes DataContext pour retourner des données et remplir des classes d’entité. Enfin, le concepteur O/R permet de concevoir des relations d’héritage entre les classes d’entité.
Ouvrir le Concepteur O/R
Pour ajouter un modèle d’entité LINQ to SQL à votre projet, choisissez Project>Ajouter un nouvel élément, puis sélectionnez CLASSES LINQ to SQL dans la liste des éléments du projet :
Visual Studio crée un fichier .dbml
et l’ajoute à votre solution. Il s’agit du fichier de mappage XML et de ses fichiers de code associés.
Lorsque vous sélectionnez le fichier .dbml
, Visual Studio affiche la surface du Concepteur O/R qui vous permet de créer visuellement le modèle. L’illustration suivante montre le concepteur après que les tables Northwind Customers
et Orders
ont été déplacées de l’Explorateur de serveurs. Notez la relation entre les tables.
Important
Le Concepteur O/R est un mappeur objet relationnel simple, car il ne prend en charge que les relations de mappage 1:1. En d’autres termes, une classe d’entité ne peut avoir qu’une relation de mappage 1:1 avec une table de base de données ou une vue. Le mappage complexe, tel que le mappage d’une classe d’entité à une table jointe, n’est pas pris en charge ; utilisez Entity Framework pour le mappage complexe. En outre, le concepteur est un générateur de code unidirectionnel. Cela signifie que seules les modifications apportées à l'aire du concepteur sont répercutées dans le fichier de code. Les modifications manuelles apportées au fichier de code ne sont pas reflétées dans le concepteur O/R. Les modifications apportées manuellement dans le fichier de code sont remplacées lorsque le concepteur est enregistré et le code régénéré. Pour plus d’informations sur l’ajout de code utilisateur et l’extension des classes générées par le concepteur O/R, consultez How to : Extend code generated by the O/R Designer.
Créer et configurer DataContext
Après avoir ajouté un élément Classes LINQ to SQL à un projet et ouvert le Concepteur O/R, l’aire de conception vide représente un DataContext vide prêt à être configuré. Le DataContext est configuré avec les informations de connexion fournies par le premier élément glissé sur l’aire de conception. Par conséquent, DataContext est configuré en utilisant les informations de connexion du premier élément déposé sur l’aire de conception. Pour plus d’informations sur la classe DataContext, consultez les méthodes DataContext (Concepteur O/R).
Créer des classes d’entité qui correspondent aux tables et vues de base de données
Vous pouvez créer des classes d’entité mappées à des tables et des vues en faisant glisser des tables et des vues de base de données depuis l’Explorateur de serveurs () ou l’Explorateur de bases de données () vers le concepteur O/R . Comme indiqué dans la section précédente, le DataContext est configuré avec les informations de connexion fournies par le premier élément déplacé sur la surface de conception. Si un élément ultérieur qui utilise une connexion différente est ajouté au O/R Designer, vous pouvez modifier la connexion pour le DataContext. Pour plus d’informations, consultez Guide pratique pour créer des classes LINQ to SQL mappées aux tables et vues (Concepteur O/R).
Créer des méthodes DataContext qui appellent des procédures stockées et des fonctions
Vous pouvez créer des méthodes DataContext qui appellent (et sont mappées à) des procédures stockées et des fonctions en les faisant glisser de l'Explorateur de serveurs ou de l'Explorateur de bases de données sur le Concepteur O/R. Les procédures stockées et les fonctions sont ajoutées au Designer O/R en tant que méthodes du DataContext.
Note
Lorsque vous faites glisser des procédures stockées et des fonctions depuis Explorateur de serveurs ou Explorateur de bases de données sur le concepteur O/R, le type de retour de la méthode DataContext générée diffère selon l’emplacement où vous déposez l’élément. Pour plus d’informations, consultez Méthodes DataContext (Concepteur O/R).
Configurer un DataContext pour utiliser des procédures stockées pour enregistrer des données entre des classes d’entité et une base de données
Comme indiqué précédemment, vous pouvez créer des méthodes DataContext qui appellent des procédures stockées et des fonctions. En outre, vous pouvez également affecter des procédures stockées utilisées pour le comportement d’exécution LINQ to SQL par défaut, qui effectue des insertions, des mises à jour et des suppressions. Pour plus d’informations, consultez Comment : affecter des procédures stockées pour effectuer des mises à jour, des insertions et des suppressions (Concepteur O/R).
Héritage et Concepteur O/R
Comme d’autres objets, les classes LINQ to SQL peuvent utiliser l’héritage et être dérivées d’autres classes. Dans une base de données, les relations d’héritage sont créées de plusieurs façons. Le Concepteur O/R prend en charge le concept d’héritage à table unique qui est souvent implémenté dans les systèmes relationnels. Pour plus d’informations, consultez Guide pratique pour configurer l’héritage à l’aide du concepteur O/R.
Requêtes LINQ vers SQL
Les classes d’entité créées par le concepteur O/R sont conçues pour une utilisation avec LINQ (Language Integrated Query). Pour plus d’informations, consultez How to : Query for information.
Séparer le DataContext généré et le code de classe d’entité dans des espaces de noms différents
Le Concepteur O/R fournit les propriétés Espace de noms du contexte et Espace de noms de l’entité sur le DataContext. Ces propriétés déterminent l’espace de noms dans lequel le code de DataContext et de classe d’entité est généré. Par défaut, ces propriétés sont vides et les DataContext et les classes d’entité sont générées dans l’espace de noms de l’application. Pour générer le code dans un espace de noms autre que l’espace de noms de l’application, entrez une valeur dans les propriétés de l’espace de noms de contexte et/ou Entity Namespace.