Outils LINQ to SQL dans Visual Studio
LINQ to SQL a été la première technologie de mappage objet-relationnel 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 ne nécessitent pas de mappage à plusieurs tables. En général, les nouvelles applications doivent utiliser Entity Framework lorsqu’une couche de mappeur relationnel 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 Objet Relationnel (Concepteur O/R). Le Concepteur O/R est l’interface utilisateur permettant de modifier des fichiers .dbml. La modification de fichiers .dbml avec une surface de concepteur nécessite les outils LINQ to SQL qui ne sont pas installés par défaut dans le cadre de l’une 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, sélectionnez l’onglet Composants individuels, puis sélectionnez Outils LINQ to SQL sous la catégorie Outils de code.
Qu’est-ce que le Concepteur O/R
Le Concepteur O/R comporte deux zones distinctes dans son aire de conception : le volet d’entités à gauche et le volet de méthodes à droite. Le volet d'entités est l'aire de conception principale qui affiche les classes d'entité, associations et hiérarchies d'héritage. Le volet de méthodes est l’aire de conception qui affiche les méthodes DataContext mappé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 les objets dans une base de données. En d’autres termes, le Concepteur O/R est utilisé pour créer, dans une application, un modèle objet qui effectue un mappage aux objets d’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 aux méthodes DataContext afin de retourner des données et de remplir des classes d’entité. Enfin, le Concepteur O/R donne la possibilité de concevoir des relations d’héritage entre des classes d’entité.
Ouvrir le Concepteur O/R
Pour ajouter un modèle d’entité LINQ to SQL à votre projet, choisissez Projet>Ajouter un nouvel élément, puis sélectionnez Classes LINQ to SQL dans la liste des éléments de 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é peut uniquement avoir une relation de mappage 1:1 avec une table ou une vue de base de données. 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 au fichier de code ne se sont pas répercuté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 la façon d’ajouter le code utilisateur et d’étendre les classes générées par le Concepteur O/R, consultez Comment : étendre le code généré par le Concepteur O/R.
Créer et configurer DataContext
Après avoir ajouté un élément Classes LINQ to SQL à un projet et ouvert le Concepteur O/R, la surface 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 Méthodes DataContext (Concepteur O/R).
Créer des classes d’entité qui mappent aux tables et vues de base de données
Vous pouvez créer des classes d’entité mappées aux tables et aux vues en faisant glisser des tables et des vues de base de données de 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, DataContext est configuré avec les informations de connexion fournies par le premier élément glissé sur l’aire de conception. Si un élément suivant qui utilise une connexion différente est ajouté au Concepteur O/R, vous pouvez modifier la connexion pour le DataContext. Pour plus d’informations, consultez le Guide pratique pour créer des classes LINQ to SQL mappées à des tables et à des 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 (sont mappées à) des procédures stockées et des fonctions en les faisant glisser de l’Explorateur de serveurs ou l’Explorateur de bases de données vers le concepeur O/R. Les procédures stockées et fonctions sont ajoutées au Concepteur O/R comme méthodes du DataContext.
Notes
Lorsque vous faites glisser des procédures stockées et des fonctions de l’Explorateur de serveurs ou l’Explorateur de bases de données vers le Concepteur O/R, le type de retour de la méthode DataContext générée diffère selon l’endroit où vous placez l’élément. Pour plus d’informations, consultez Méthodes DataContext (Concepteur O/R).
Configurer une méthode DataContext pour utiliser des procédures stockées afin d’enregistrer les données entre des classes d’entité et une base de données
Comme mentionné 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 assigner des procédures stockées qui peuvent être utilisées pour le comportement au moment de l’exécution par défaut de LINQ to SQL qui effectue les insertions, les mises à jour et les suppressions. Pour plus d’informations, consultez Guide pratique pour 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 to SQL
Les classes d'entité créées par le Concepteur O/R sont conçues pour être utilisées avec la requête LINQ (Language Integrated Query). Pour plus d’informations, consultez le Guide pratique pour demander des informations.
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 dans quel espace de noms le DataContext et le code de classe entité est généré. Par défaut, ces propriétés sont vides, les DataContext et les classes d'entité étant générés 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 Espace de noms du contexte et/ou Espace de noms de l’entité.