Procédure pas à pas : personnalisation du comportement d'insertion, de mise à jour et de suppression de classes d'entité
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. LINQ to SQL vous permet d'utiliser la technologie LINQ pour accéder aux bases de données SQL. Pour plus d'informations, consultez LINQ (Language-Integrated Query).
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 d'insertion, de mise à jour et de suppression par défaut en fonction du schéma de la table (définitions de colonne et informations de clé primaire). 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 manipulation 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 vos classes d'entité mappent aux vues. 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. Pour plus d'informations, consultez Personnalisation d'opérations à l'aide de procédures stockées (LINQ to SQL).
Notes
Cette procédure pas à pas nécessite les procédures stockées 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.
Cette procédure pas à pas décrit les étapes à suivre pour substituer le comportement au moment de l'exécution par défaut de LINQ to SQL et enregistrer les données dans une base de données à l'aide de procédures stockées.
Dans cette procédure pas à pas, vous allez apprendre à effectuer les tâches suivantes :
Créer une application Windows Forms et lui ajouter un fichier LINQ to SQL.
Créer une classe d'entité mappée à la table Customers Northwind.
Créer un objet source de données qui référence la classe Customer de LINQ to SQL.
Créer un Windows Form qui contient un DataGridView lié à la classe Customer.
Implémenter une fonctionnalité d'enregistrement pour le formulaire.
Créer des méthodes DataContext en ajoutant des procédures stockées au Concepteur O/R.
Configurer la classe Customer pour utiliser des procédures stockées pour 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édures stockées InsertCustomer, UpdateCustomer et DeleteCustomer 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 et ajout de classes LINQ to SQL
Comme vous allez travailler avec les classes LINQ to SQL et afficher les données sur un Windows Form, vous devez créer une application Windows Forms et ajouter un fichier de classes LINQ to SQL.
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 un nouveau projet d'application Windows qui contient des classes LINQ to SQL
Dans le menu Fichier, créez un nouveau projet.
Nommez le projet UpdatingwithSProcsWalkthrough.
Notes
Le Concepteur O/R est pris en charge dans les projets Visual Basic et C#. Par conséquent, vous pouvez 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 UpdateSingleTableWalkthrough est créé et ajouté à l'Explorateur de solutions.
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.
Création de la classe d'entité du client et de l'objet source de données
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. Les classes d'entité LINQ to SQL qui en résultent mappent aux tables de la base de données. Après avoir créé des classes d'entité, vous pouvez les utiliser en tant qu'objets sources de données comme toute autre classe ayant des propriétés publiques.
Pour créer une classe d'entité client et configurer une source de données correspondante
Dans l'Explorateur de serveurs/Explorateur de bases de données, localisez la table Customer dans la version 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).
Dans le menu Générer, cliquez sur Générer UpdatingwithSProcsWalkthrough 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 UpdatingwithSProcsWalkthrough, 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 d'un DataGridView pour afficher les données de Customer 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 aux classes 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.
Ouvrez Form1 dans l'éditeur de 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;
Implémentation de la fonctionnalité d'enregistrement
Par défaut, le bouton d'enregistrement n'est pas activé et la fonctionnalité d'enregistrement n'est pas implémentée. En outre, le code n'est pas automatiquement ajouté pour enregistrer dans les bases de données des données modifiées lorsque les contrôles liés aux données sont créés pour les objets source de données. 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 sur CustomerBindingNavigator (le bouton avec l'icône de 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 :
NorthwindDataContext1.SubmitChanges()
northwindDataContext1.SubmitChanges();
Substitution du comportement par défaut pour effectuer des mises à jour (insertions, mises à jour et suppressions)
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 les procédures stockées InsertCustomers, UpdateCustomers et DeleteCustomers.
Faites glisser les trois procédures stockées vers le Concepteur O/R.
Les procédures stockées sont ajoutées au volet de méthodes comme méthodes DataContext. Pour plus d'informations, consultez Méthodes DataContext (Concepteur O/R).
Sélectionnez la classe d'entité Customer dans le Concepteur O/R.
Dans la fenêtre Propriétés, sélectionnez la propriété Insert.
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 InsertCustomers dans la liste Personnaliser.
Cliquez sur Appliquer pour enregistrer la configuration de la classe et du comportement sélectionnés..
Notes
Vous pouvez continuer à configurer le comportement de chaque combinaison classe/comportement tant que vous cliquez sur Appliquer après chaque modification. Si vous modifiez la classe ou le comportement avant de cliquer sur Appliquer, une boîte de dialogue d'avertissement s'affiche pour vous donner la possibilité d'appliquer toutes les modifications.
Sélectionnez Mettre à jour dans la liste 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. Cela simplifie le suivi des modifications et la création des instructions qui vérifient les violations d'accès concurrentiel.
Mappez l'argument de méthode Original_CustomerID à la propriété de classe 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é sont 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 Appliquer pour enregistrer la configuration de la classe et du comportement sélectionnés.
Sélectionnez Supprimer dans la liste Comportement.
Sélectionnez Personnaliser.
Sélectionnez la méthode DeleteCustomers dans la liste Personnaliser.
Mappez l'argument de méthode Original_CustomerID à la propriété de classe CustomerID (Original).
Cliquez sur OK.
Notes
Bien qu'il ne s'agisse pas d'un problème pour cette procédure pas à pas, notez que LINQ to SQL gère automatiquement les valeurs générées par une base de données pour les colonnes identity (incrémentation automatique), rowguidcol (GUID généré par la base de données) et timestamp lors des insertions et des mises à jour. Les valeurs générées par une base de données dans les autres types de colonne entraînent une valeur null de manière inopinée. Pour retourner les valeurs générées par une base de données, vous devez affecter la valeur true à IsDbGenerated et l'une des valeurs suivantes à AutoSync : Always, OnInsert ou OnUpdate.
Test de l'application
Exécutez une nouvelle fois l'application pour vérifier que la procédure stockée UpdateCustomers met à jour correctement l'enregistrement Customer dans la base de données.
Pour tester l'application
Appuyez sur F5.
Modifiez un enregistrement dans la grille pour tester le comportement de mise à jour.
Ajoutez un nouvel enregistrement pour tester le comportement d'insertion.
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 l'enregistrement mis à jour et l'enregistrement inséré persistent.
Supprimez le nouvel enregistrement que vous avez créé au cours de l'étape 3 pour tester le comportement de suppression.
Cliquez sur le bouton d'enregistrement pour valider les modifications et supprimer l'enregistrement effacé de la base de données
Fermez le formulaire.
Appuyez sur F5 et vérifiez que l'enregistrement effacé a été bien supprimé de la base de données.
Notes
Si votre application utilise SQL Server Express Edition, selon la valeur de la propriété Copier dans le répertoire de sortie du fichier de base de données, les modifications peuvent ne pas paraître lorsque vous appuyez sur F5 à l'étape 10. Pour plus d'informations, consultez Comment : gérer des fichiers de données locaux dans votre projet.
É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 :
Implémenter la vérification des accès concurrentiels pendant les mises à jour. Pour plus d'informations, consultez Vue d'ensemble de l'accès concurrentiel optimiste (LINQ to SQL).
Ajouter des requêtes LINQ pour filtrer des données. Pour plus d'informations, consultez Introduction aux requêtes LINQ (C#).
Voir aussi
Tâches
Concepts
Méthodes DataContext (Concepteur O/R)
Nouveautés du développement d'applications de données