Procédure pas à pas : création de classes LINQ to SQL (Concepteur O/R)
Le Concepteur Objet/Relationnel (Concepteur O/R) fournit une aire de conception visuelle pour créer et modifier des classes LINQ to SQL (classes d'entité) basées sur des objets dans une base de données. En utilisant LINQ to SQL, vous avez accès aux bases de données SQL à l'aide de la technologie LINQ. Pour plus d'informations, consultez LINQ (Language-Integrated Query).
Cette procédure pas à pas fournit les étapes que vous devez suivre pour créer des classes d'entité LINQ to SQL mappées aux tables Customers et Orders dans la base de données Northwind et afficher les données sur un Windows Form. Les étapes permettant d'afficher les données de la table se complètent de celles qui se chargent de lier des données à une requête LINQ. Les dernières étapes couvrent le remplacement de la logique par défaut LINQ to SQL par des procédures stockées pour envoyer des mises à jour des classes d'entité vers la base de données.
Dans cette procédure pas à pas, vous allez apprendre à effectuer les tâches suivantes :
Ajouter un fichier LINQ to SQL à un projet.
Créer de nouvelles classes d'entité mappées aux tables associées dans la base de données.
Créer un objet source de données qui référence les classes d'entité.
Créer un Windows Form qui contient des contrôles liés aux classes d'entité.
Ajouter le code pour charger et enregistrer les données entre les classes d'entité et la base de données.
Créer une simple requête LINQ et afficher les résultats sur le formulaire.
Ajouter des procédures stockées au Concepteur O/R.
Configurer une classe d'entité pour utiliser des procédures stockées afin d'effectuer des insertions, des mises à jour et des suppressions.
Composants requis
Pour exécuter cette procédure pas à pas, vous devez disposer des éléments suivants :
Accès à la version SQL Server de l'exemple de base de données Northwind. Pour plus d'informations, consultez Comment : installer des exemples de bases de données.
Procédure stockée UpdateCustomer pour la base de données Northwind. Pour plus d'informations, consultez Procédure pas à pas : création de procédures stockées de mise à jour pour la table Customers de Northwind.
Création d'une application Windows
Comme vous allez travailler avec les classes LINQ to SQL et afficher les données sur un Windows Form, la première étape dans cette procédure pas à pas consiste à créer une application Windows Forms.
Notes
Il est possible que votre ordinateur affiche des noms ou des emplacements différents pour certains des éléments d'interface utilisateur de Visual Studio dans les instructions suivantes. L'édition de Visual Studio dont vous disposez et les paramètres que vous utilisez déterminent ces éléments. Pour plus d'informations, consultez Paramètres Visual Studio.
Pour créer le nouveau projet Application Windows
Dans le menu Fichier, créez un nouveau projet.
Nommez le projet ORDesignerWalkthrough.
Notes
Le Concepteur O/R est pris en charge dans les projets Visual Basic et C# ; vous pouvez donc créer le projet dans l'un ou l'autre de ces langages.
Cliquez sur le modèle Application Windows Forms, puis sur OK. Pour plus d'informations, consultez Création d'applications Windows.
Le projet ORDesignerWalkthrough est créé et ajouté à l'Explorateur de solutions.
Ajout d'un fichier de classes LINQ to SQL au projet (ouverture du Concepteur O/R)
Les classes d'entité sont créées et stockées dans les fichiers de classes LINQ to SQL (fichiers .dbml). Le Concepteur O/R démarre lorsque vous ouvrez un fichier .dbml. Ajoutez des fichiers .dbml aux projets en sélectionnant le modèle Classes LINQ to SQL dans la boîte de dialogue Ajouter un nouvel élément.
Pour ajouter un fichier .dbml à un projet
Dans le menu Projet, cliquez sur Ajouter un nouvel élément.
Cliquez sur le modèle Classes LINQ to SQL et tapez Northwind.dbml dans la zone Nom.
Cliquez sur Ajouter.
Un fichier de classes LINQ to SQL vide (Northwind.dbml) est ajouté au projet et le Concepteur O/R s'ouvre.
Après avoir ajouté le nouveau fichier LINQ to SQL au projet, l'aire de conception vide s'ouvre, en affichant deux volets séparés. Le volet de gauche est le volet d'entités, où les classes d'entité sont affichées et configurées. Le volet de droite est le volet de méthodes qui affiche les méthodes DataContext ajoutées au concepteur. Si le volet de méthodes n'est pas visible, cliquez avec le bouton droit sur une zone vide dans le volet d'entités et cliquez sur Afficher le volet méthodes. La surface vide dans son intégralité représente un DataContext prêt à être configuré. Le nom DataContext correspond au nom que vous avez fourni pour le fichier .dbml. Pour cette procédure pas à pas, parce que vous avez nommé le fichier LINQ to SQL Northwind.dbml, le DataContext se nomme NorthwindDataContext. Vous pouvez le vérifier en cliquant sur toute zone vide du concepteur et en inspectant la fenêtre Propriétés.
Notes
La classe DataContext contient des méthodes et propriétés pour se connecter à une base de données et manipuler les données dans la base de données (par exemple, effectuer des insertions, des mises à jour et des suppressions). Pour plus d'informations, consultez Méthodes DataContext (Concepteur O/R).
Création des classes d'entité Customer et Order
Créez des classes LINQ to SQL mappées aux tables de base de données en faisant glisser des tables de l'Explorateur de serveurs/Explorateur de bases de données vers le Concepteur O/R. Le résultat est une classe d'entité LINQ to SQL qui mappe à une table dans la base de données.
Pour ajouter une classe d'entité Customer au Concepteur O/R
Dans l'Explorateur de serveurs/Explorateur de bases de données, localisez les tables dans la version de SQL Server de l'exemple de base de données Northwind. Pour plus d'informations, consultez Comment : créer une connexion de données à la base de données Northwind.
Faites glisser le nœud Customers de l'Explorateur de serveurs/Explorateur de bases de données vers l'aire du Concepteur O/R.
Une classe d'entité nommée Customer est créée. Elle comporte des propriétés qui correspondent aux colonnes de la table Customers. La classe d'entité est nommée Customer (et non Customers) parce qu'elle représente un seul client de la table Customers.
Notes
Ce comportement de changement de nom est appelé pluralisation. Il peut être activé ou désactivé dans la boîte de dialogue Options (voir Options, boîte de dialogue (Visual Studio)). Pour plus d'informations, consultez Procédure : activer et désactiver la pluralisation (Concepteur O/R).
Faites glisser le nœud Orders de l'Explorateur de serveurs/Explorateur de bases de données vers l'aire du Concepteur O/R.
Une classe d'entité nommée Order est créée, avec une association Customer_Order (relation) à la classe d'entité Customer. Elle comporte des propriétés qui correspondent aux colonnes de la table Orders.
Notes
La classe d'entité est nommée Order parce qu'elle représente une seul commande. La classe parente (Customer) a une propriété Orders qui représente la collection de commandes pour ce client spécifique. Pour plus d'informations sur les associations LINQ to SQL, consultez Procédure : créer une association (relation) entre des classes LINQ to SQL (Concepteur O/R).
Création d'une source de données objet avec la classe d'entité Customer
Les classes d'entité, tout comme les autres classes ayant des propriétés publiques, peuvent être utilisées comme sources de données d'objet. Elles peuvent être ajoutées à la fenêtre Sources de données et être glissées sur des formulaires pour créer des contrôles liés aux données (contrôles liés aux valeurs dans les propriétés publiques de l'objet). Ajoutez des classes d'entité à la fenêtre Sources de données en exécutant l' Assistant Configuration de source de données et en cliquant sur Objet pour la source de données dans l'Assistant.
Pour ajouter Customer comme objet source de données dans la fenêtre Sources de données
Dans le menu Génération, cliquez sur Build ORDesignerWalkthrough pour générer le projet.
Dans le menu Données, cliquez sur Afficher les sources de données.
Dans la fenêtre Sources de données, cliquez sur Ajouter une nouvelle source de données.
Dans la page Choisir un type de source de données, cliquez sur Objet, puis sur Suivant.
Développez le nœud ORDesignerWalkthrough (le nœud avec le nom de votre projet), puis localisez et sélectionnez la classe Customer.
Notes
Si la classe Customer n'est pas disponible, quittez l'Assistant, générez le projet et lancez une nouvelle fois l'Assistant.
Cliquez sur Terminer pour créer la source de données et ajouter la classe d'entité Customer à la fenêtre Sources de données.
Création de contrôles liés aux données pour afficher les données sur un Windows Form
Créez des contrôles liés aux classes d'entité en faisant glisser des éléments de la source de données LINQ to SQL de la fenêtre Sources de données vers un Windows Form.
Pour ajouter des contrôles liés à la classe d'entité
Ouvrez Form1 en mode Design.
Depuis la fenêtre Sources de données, faites glisser le nœud Customer vers Form1.
Notes
Pour ouvrir la fenêtre Sources de données, cliquez sur Afficher les sources de données dans le menu Données.
Faites glisser le nœud Orders de la fenêtre Sources de données vers Form1. Placez-le sous CustomerDataGridView.
Ouvrez Form1 en mode Code.
Ajoutez le code suivant au formulaire, global au formulaire, en dehors de toute méthode spécifique mais à l'intérieur de la classe Form1 :
Private NorthwindDataContext1 As New NorthwindDataContext
private NorthwindDataContext northwindDataContext1 = new NorthwindDataContext();
Créez un gestionnaire d'événements pour l'événement Form_Load et ajoutez le code suivant au gestionnaire :
CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
customerBindingSource.DataSource = northwindDataContext1.Customers;
Test de l'application
Exécutez l'application. À ce stade, le formulaire contient un premier DataGridView qui affiche les données de la table Customers et un deuxième DataGridView qui affiche les données des commandes du client sélectionné.
Notes
Remarquez que le bouton d'enregistrement est désactivé. (Vous implémenterez la fonctionnalité d'enregistrement dans la section suivante.)
Pour tester l'application
Appuyez sur F5.
Vérifiez que les données apparaissent dans les grilles.
Sélectionnez un client.
Vérifiez que les commandes affichées sont celles du client sélectionné.
Fermez le formulaire. Dans le menu Déboguer, cliquez sur Arrêter le débogage.
Implémentation de la fonctionnalité d'enregistrement
Comme indiqué plus haut, le bouton d'enregistrement n'est pas activé par défaut et la fonctionnalité d'enregistrement n'est pas implémentée. De plus, le code n'est pas automatiquement ajouté pour enregistrer dans les formulaires lorsque les contrôles liés aux données sont créés pour les sources de données d'objet. Cette section explique comment activer le bouton d'enregistrement et implémenter la fonctionnalité d'enregistrement pour les objets LINQ to SQL.
Pour implémenter la fonctionnalité d'enregistrement
Ouvrez Form1 en mode Design.
Sélectionnez le bouton d'enregistrement de CustomerBindingNavigator (bouton étiqueté d'une icône représentant une disquette.)
Dans la fenêtre Propriétés, attribuez à la propriété Enabled la valeur True.
Double-cliquez sur le bouton d'enregistrement pour créer un gestionnaire d'événements et basculer vers l'éditeur de code.
Ajoutez le code suivant dans le gestionnaire d'événements du bouton d'enregistrement :
Try NorthwindDataContext1.SubmitChanges() Catch ex As Exception MessageBox.Show(ex.Message) End Try
try { northwindDataContext1.SubmitChanges(); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Test de l'application
Exécutez l'application. Le bouton d'enregistrement doit être activé et l'enregistrement des données possible.
Pour tester l'application
Appuyez sur F5.
Modifiez des données dans chaque grille. (Naviguez hors de la ligne modifiée dans la grille pour valider les modifications en cours de processus.)
Cliquez sur le bouton d'enregistrement pour enregistrer les modifications dans la base de données.
Fermez le formulaire.
Appuyez sur F5 et vérifiez que les modifications ont été rendues persistantes (ou localisez la table dans la base de données pour vérifier que les modifications ont été enregistrées).
Liaison avec les requêtes LINQ
Outre la liaison de CustomerBindingSource au DataContext, vous avez la possibilité de créer directement une liaison avec les requêtes LINQ. Pour plus d'informations sur la création de requêtes LINQ, consultez Introduction aux requêtes LINQ (C#).
Ajout d'un bouton et d'une zone de texte au formulaire
Pour apprendre à lier des contrôles aux requêtes LINQ, ajoutez des contrôles au formulaire qui vous permettent d'entrer un paramètre de requête, puis exécutez la requête.
Pour ajouter des contrôles au formulaire
Ouvrez Form1 en mode Design.
Ajoutez une Zone de texte au formulaire et affectez à sa propriété Nom la valeur CityTextBox.
Ajoutez un Bouton au formulaire et définissez les propriétés suivantes :
Nom = RunQueryButton
Texte = Exécuter la requête
Liaison de données à la requête LINQ
Ajoutez le code pour exécuter une requête LINQ. La requête utilise la valeur tapée dans CityTextBox comme paramètre de requête.
Pour lier à une requête LINQ
Double-cliquez sur RunQueryButton et ajoutez au gestionnaire d'événements RunQueryButton_click le code suivant :
Dim CustomersQuery = From customers in NorthwindDataContext1.Customers _ Where customers.City = CityTextBox.Text _ Select customers CustomerBindingSource.DataSource = CustomersQuery
var CustomersQuery = from customers in northwindDataContext1.Customers where customers.City == CityTextBox.Text select customers; customerBindingSource.DataSource = CustomersQuery;
Test de l'application
Exécutez l'application. Vous pouvez maintenant faire une requête concernant des clients d'une ville spécifique.
Pour tester l'application
Appuyez sur F5.
Tapez London dans la zone de texte.
Cliquez sur le bouton Exécuter la requête.
Vérifiez que seuls les clients dont la propriété City a la valeur London sont affichés.
Substitution du comportement par défaut pour effectuer des mises à jour (insertions, mises à jour et suppressions)
Par défaut, la logique d'exécution des mises à jour est fournie par le runtime de LINQ to SQL. Le runtime crée les instructions par défaut pour l'insertion, la mise à jour et la suppression, elles-mêmes basées sur l'instruction utilisée pour remplir votre classe d'entité avec les données. Si vous ne souhaitez pas utiliser le comportement par défaut, vous pouvez configurer le comportement de mise à jour et désigner des procédures stockées spécifiques pour exécuter les instructions d'insertion, de mise à jour et de suppression nécessaires à la gestion des données dans la base de données. Vous pouvez également le faire lorsque le comportement par défaut n'est pas généré, par exemple, lorsque votre classe d'entité mappe à des tables jointes. En outre, vous pouvez substituer le comportement de mise à jour par défaut lorsque la base de données nécessite un accès aux tables via des procédures stockées.
Notes
Cette procédure pas à pas nécessite les procédures stockées supplémentaires InsertCustomer, UpdateCustomer et DeleteCustomer pour la base de données Northwind. Pour plus d'informations sur la création de ces procédures stockées, consultez Procédure pas à pas : création de procédures stockées de mise à jour pour la table Customers de Northwind.
Pour substituer le comportement de mise à jour par défaut
Ouvrez le fichier LINQ to SQL dans le Concepteur O/R. (Double-cliquez sur le fichier Northwind.dbml dans l'Explorateur de solutions.)
Dans l'Explorateur de serveurs/Explorateur de bases de données, développez le nœud Procédures stockées de la base de données Northwind et localisez la procédure stockée UpdateCustomers.
Faites glisser la procédure stockée UpdateCustomers vers le Concepteur O/R.
La procédure stockée UpdateCustomers est ajoutée au volet de méthodes comme méthode DataContext. Pour plus d'informations, consultez Méthodes DataContext (Concepteur O/R).
Sélectionnez la classe d'entité Customer du Concepteur O/R.
Dans le Fenêtre Propriétés, sélectionnez la commande à substituer. (Insert, Update ou Delete). Pour cet exemple, sélectionnez la propriété Update.
Cliquez sur les points de suspension (…) de l'option Utiliser le runtime pour ouvrir la boîte de dialogue Configurer le comportement.
Sélectionnez Personnaliser.
Sélectionnez la méthode UpdateCustomers dans la liste Personnaliser.
Inspectez la liste d' Arguments de méthode et de Propriétés de classe ; remarquez qu'il y a deux Arguments de méthode et deux Propriétés de classe pour certaines colonnes de la table. Elles facilitent le suivi des modifications et la création des instructions qui vérifient les violations d'accès concurrentiel.
Mappez les arguments de méthode d'origine (Original_ArgumentName) aux propriétés d'origine (PropertyName (Original)). Pour cette procédure pas à pas, vous devez mapper l'argument Original_CustomerID à la propriété CustomerID (Original).
Notes
Par défaut, les arguments de méthode sont mappés à des propriétés de classe lorsque les noms correspondent. Si les noms de propriété ont été modifiés et ne correspondent plus entre la table et la classe d'entité, vous devrez peut-être sélectionner la propriété de classe équivalente à mapper si le Concepteur O/R ne peut pas déterminer le mappage correct. En outre, si les arguments de méthode n'ont pas de propriétés de classe valides à mapper, vous pouvez donner à Propriétés de classe la valeur (Aucune).
Cliquez sur OK.
Test de l'application
Exécutez une nouvelle fois l'application pour vérifier que la procédure stockée UpdateCustomers met correctement à jour l'enregistrement Customer dans la base de données.
Pour tester l'application
Appuyez sur F5.
Localisez la colonne ContactName dans la grille pour ALFKI.
Modifiez le nom de Maria Anders en Anders.
Naviguez hors de la ligne pour valider la modification.
Cliquez sur le bouton d'enregistrement.
Fermez le formulaire.
Appuyez sur F5 pour exécuter une nouvelle fois l'application et vérifier que seul Anders apparaît dans la colonne ContactName pour ALFKI.
Étapes suivantes
Selon les spécifications de votre application, vous pouvez effectuer différentes étapes après avoir créé des classes d'entité LINQ to SQL. Plusieurs améliorations peuvent être apportées à cette application, notamment :
Ajout de procédures stockées supplémentaires à utiliser pour les instructions d'insertion et de suppression. Pour plus d'informations, consultez Procédure : assigner des procédures stockées pour effectuer des mises à jour, des insertions et des suppressions (Concepteur O/R).
Construction de différentes requêtes LINQ pour retourner des données filtrées. Pour plus d'informations, consultez Procédure : demander des informations (LINQ to SQL).
Voir aussi
Référence
LINQ General Programming Guide
Concepts
Vue d'ensemble du Concepteur O/R
Nouveautés du développement d'applications de données
Autres ressources
Concepteur Objet/Relationnel (Concepteur O/R)
LINQ Documentation Roadmap