Partager via


Procédure pas à pas : personnaliser le comportement d’insertion, de mise à jour et de suppression des classes d’entité

Remarque

La DataSet classe et les classes associées sont des technologies .NET Framework héritées du début des années 2000 qui permettent aux applications d’utiliser des données en mémoire pendant que les applications sont déconnectées de la base de données. Les technologies sont particulièrement utiles pour les applications qui permettent aux utilisateurs de modifier les données et de conserver les modifications apportées à la base de données. Bien que les jeux de données soient une technologie éprouvée, l’approche recommandée pour les nouvelles applications .NET consiste à utiliser Entity Framework Core. Entity Framework offre un moyen plus naturel d’utiliser des données tabulaires en tant que modèles objet et dispose d’une interface de programmation plus simple.

Les outils LINQ to SQL dans Visual Studio fournissent une aire de conception visuelle permettant de créer et de modifier des classes LINQ to SQL (classes d’entité) basées sur des objets d’une base de données. En utilisant LINQ to SQL, vous pouvez 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 LINQ to SQL. Le runtime crée les instructions par défaut Insert, Update et Delete basées sur le schéma de la table (les définitions de colonne et les informations de clé primaire). Quand 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 effectuer les insertions, mises à jour et suppressions nécessaires pour travailler avec les données de la base de données. Vous pouvez également effectuer cette opération lorsque le comportement par défaut n’est pas généré, par exemple lorsque vos classes d’entité sont mappées aux vues. En outre, vous pouvez remplacer le comportement de mise à jour par défaut lorsque la base de données nécessite un accès à la table via des procédures stockées. Pour plus d’informations, consultez Personnalisation des opérations à l’aide de procédures stockées.

Remarque

Cette procédure pas à pas nécessite la disponibilité des procédures stockées InsertCustomer, UpdateCustomer et DeleteCustomer pour la base de données Northwind.

Cette procédure pas à pas fournit les étapes à suivre pour remplacer le comportement d’exécution LINQ to SQL par défaut pour enregistrer des données dans une base de données à l’aide de procédures stockées.

Au cours de cette procédure pas à pas, vous allez apprendre à effectuer les tâches suivantes :

  • Créez une application Windows Forms et ajoutez un fichier LINQ to SQL à celui-ci.

  • Créez une classe d’entité mappée à la table Northwind Customers .

  • Créez une source de données d’objet qui référence la classe LINQ to SQL Customer .

  • Créez un Windows Form qui contient un DataGridView élément lié à la Customer classe.

  • Implémentez la fonctionnalité d’enregistrement du formulaire.

  • Créez des DataContext méthodes en ajoutant des procédures stockées au Concepteur O/R.

  • Configurez la Customer classe pour utiliser des procédures stockées pour effectuer des insertions, des mises à jour et des suppressions.

Conditions préalables

Cette procédure pas à pas utilise SQL Server Express LocalDB et l’exemple de base de données Northwind.

  1. Si sql Server Express LocalDB n’est pas installé, installez-le à partir de la page de téléchargement SQL Server Express ou via Visual Studio Installer. Dans Visual Studio Installer, vous pouvez installer SQL Server Express LocalDB dans le cadre du stockage et du traitement des données charge de travail, ou en tant que composant individuel.

  2. Installez l’exemple de base de données Northwind en procédant comme suit :

    1. Dans Visual Studio, ouvrez la fenêtre de l’Explorateur d’objets SQL Server. (L’Explorateur d’objets SQL Server s’installe dans le cadre de la charge de travail de stockage et de traitement des données dans Visual Studio Installer.) Développez le nœud SQL Server . Cliquez avec le bouton droit sur votre instance LocalDB, puis sélectionnez nouvelle requête.

      Une fenêtre de l’éditeur de requête s’ouvre.

    2. Copiez le script Northwind Transact-SQL dans votre presse-papiers. Ce script T-SQL crée la base de données Northwind à partir de zéro et la remplit avec des données.

    3. Collez le script T-SQL dans l’éditeur de requête, puis choisissez le bouton Exécuter.

      Après un court laps de temps, la requête se termine et la base de données Northwind est créée.

Création d’une application et ajout de classes LINQ to SQL

Étant donné que vous utilisez des classes LINQ to SQL et que vous affichez les données sur un Windows Form, créez une application Windows Forms et ajoutez un fichier LINQ to SQL Classes.

Remarque

Les instructions de cet article illustrent la version la plus récente de l’expérience de développement interactive (IDE) disponible dans Visual Studio. Votre ordinateur peut afficher différents noms ou emplacements pour certains des éléments de l’interface utilisateur. Vous utilisez peut-être une version différente de Visual Studio ou des paramètres d’environnement différents. Pour plus d’informations, consultez Personnaliser l’IDE.

Pour créer un projet d’application Windows Forms qui contient des classes LINQ to SQL

  1. Dans Visual Studio, dans le menu Fichier, sélectionnez Nouveau>Projet.

  2. Développez Visual C# ou Visual Basic dans le volet gauche, puis sélectionnez Bureau Windows.

  3. Dans le volet central, sélectionnez le type de projet d’application Windows Forms .

  4. Nommez le projet UpdatingWithSProcsWalkthrough, puis choisissez OK.

    Le projet UpdatingWithSProcsWalkthrough est créé et ajouté à l’Explorateur de solutions.

  5. Dans le menu du Projet , cliquez sur Ajouter un nouvel élément.

  6. Cliquez sur le modèle LINQ to SQL Classes et tapez Northwind.dbml dans la zone Nom.

  7. Cliquez sur Ajouter.

    Un fichier LINQ to SQL Classes vide (Northwind.dbml) est ajouté au projet et le Concepteur O/R s’ouvre.

Créer la source de données de la classe d’entité client et de l’objet

Créez des classes LINQ to SQL mappées à des tables de base de données en faisant glisser des tables de l’Explorateur de serveurs ou de l’Explorateur de bases de données vers le Concepteur O/R. Le résultat est les classes d’entité LINQ to SQL qui correspondent aux tables de la base de données. Une fois que vous avez créé des classes d’entité, elles peuvent être utilisées comme sources de données d’objet comme d’autres classes qui ont des propriétés publiques.

Pour créer une classe d’entité Customer et configurer une source de données avec celle-ci

  1. Dans l’Explorateur de serveurs ou l’Explorateur de bases de données, recherchez la table Customer dans la version SQL Server de l’exemple de base de données Northwind.

  2. Faites glisser le nœud Clients de l’Explorateur de serveurs ou de l’Explorateur de bases de données sur la surface du concepteur O/R.

    Une classe d’entité nommée Customer est créée. Elle a des propriétés qui correspondent aux colonnes de la table Customers. La classe d’entité est nommée Customer (et non Customers), car elle représente un client unique à partir de la table Customers.

    Remarque

    Ce comportement de renommage est appelé pluralisation. Il peut être activé ou désactivé dans la boîte de dialogue Options. Pour plus d’informations, consultez Guide pratique pour activer et désactiver la pluralisation (Concepteur O/R).

  3. Dans le menu Générer , cliquez sur Build UpdatingwithSProcsWalkthrough pour générer le projet.

  4. Pour ouvrir la fenêtre Sources de données , dans le menu Données , cliquez sur Afficher les sources de données.

  5. Dans la fenêtre Sources de Données, cliquez sur Ajouter une nouvelle source de données.

  6. Cliquez sur Objet dans la page Choisir un type de source de données , puis sélectionnez Suivant.

  7. Développez le nœud UpdatingwithSProcsWalkthrough et recherchez et sélectionnez la classe Customer .

    Remarque

    Si la classe Customer n’est pas disponible, annulez l’Assistant, générez le projet et réexécutez l’Assistant.

  8. 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éer un DataGridView pour afficher les données client sur un Windows Form

Créez des contrôles liés à des classes d’entité en faisant glisser LINQ vers des éléments de source de données SQL de la fenêtre Sources de données vers un Windows Form.

Pour ajouter des contrôles liés aux classes d’entité

  1. Ouvrez Form1 en mode Création.

  2. Dans la fenêtre Sources de données , faites glisser le nœud Client vers Form1.

    Remarque

    Pour afficher la fenêtre Sources de données , cliquez sur Afficher les sources de données dans le menu Données .

  3. Ouvrez Form1 dans l’éditeur de code.

  4. Ajoutez le code suivant au formulaire, global au formulaire, en dehors de toute méthode spécifique, mais à l’intérieur de la Form1 classe :

    private NorthwindDataContext northwindDataContext1
        = new NorthwindDataContext();
    
  5. Créez un gestionnaire d’événements pour l’événement Form_Load et ajoutez le code suivant au gestionnaire :

    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Implémenter la fonctionnalité d’enregistrement

Par défaut, le bouton Enregistrer n’est pas activé et la fonctionnalité d’enregistrement n’est pas implémentée. De plus, le code n’est pas automatiquement ajouté pour enregistrer les données modifiées dans la base de données lorsque des 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 Enregistrer et implémenter la fonctionnalité d’enregistrement pour les objets LINQ to SQL.

Pour implémenter la fonctionnalité d’enregistrement

  1. Ouvrez Form1 en mode Création.

  2. Sélectionnez le bouton Enregistrer sur CustomerBindingNavigator (bouton avec l’icône de disque de floppy).

  3. Dans la fenêtre Propriétés , définissez la propriété Enabled sur True.

  4. Double-cliquez sur le bouton Enregistrer pour créer un gestionnaire d’événements et basculer vers l’éditeur de code.

  5. Ajoutez le code suivant dans le gestionnaire d’événements du bouton Enregistrer :

    northwindDataContext1.SubmitChanges();
    

Remplacez le comportement par défaut pour effectuer des mises à jour (insertions, mises à jour et suppressions)

Pour remplacer le comportement de mise à jour par défaut

  1. Ouvrez le fichier LINQ to SQL dans le Concepteur O/R. (Double-cliquez sur le fichier Northwind.dbml dans l’Explorateur de solutions.)

  2. Dans l’Explorateur de serveurs ou l’Explorateur de bases de données, développez le nœud Procédures stockées des bases de données Northwind et recherchez les procédures stockées InsertCustomers, UpdateCustomers etDeleteCustomers.

  3. Faites glisser les trois procédures stockées vers le Concepteur Objet Relationnel.

    Les procédures stockées sont ajoutées au volet méthodes en tant que DataContext méthodes. Pour plus d'informations, consultez les méthodes DataContext (Concepteur O/R) .

  4. Sélectionnez la classe d’entité Customer dans le Concepteur O/R.

  5. Dans la fenêtre Propriétés , sélectionnez la propriété Insert .

  6. Cliquez sur les points de suspension (...) en regard de Utiliser l'exécution pour ouvrir la boîte de dialogue Configurer le comportement.

  7. Cliquez sur Personnaliser.

  8. Sélectionnez la méthode InsertCustomers dans la liste Personnaliser .

  9. Cliquez sur Appliquer pour enregistrer la configuration de la classe et du comportement sélectionnés.

    Remarque

    Vous pouvez continuer à configurer le comportement de chaque combinaison classe/comportement tant que vous cliquez sur Appliquer après avoir apporté chaque modification. Si vous modifiez la classe ou le comportement avant de cliquer sur Appliquer, une boîte de dialogue d’avertissement permettant d’appliquer les modifications s’affiche.

  10. Sélectionnez Mettre à jour dans la liste Comportement .

  11. Cliquez sur Personnaliser.

  12. Sélectionnez la méthode UpdateCustomers dans la liste Personnaliser .

    Inspectez la liste des arguments de méthode et des propriétés de classe et notez qu’il existe 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.

  13. Mappez l’argument de méthode Original_CustomerID à la propriété de classe CustomerID (Original).

    Remarque

    Par défaut, les arguments de méthode sont mappés aux propriétés de classe lorsque les noms correspondent. Si les noms de propriétés 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 définir la valeur Propriétés de la classesur (None).

  14. Cliquez sur Appliquer pour enregistrer la configuration de la classe et du comportement sélectionnés.

  15. Sélectionnez Supprimer dans la liste Comportement .

  16. Cliquez sur Personnaliser.

  17. Sélectionnez la méthode DeleteCustomers dans la liste Personnaliser .

  18. Mappez l’argument de méthode Original_CustomerID à la propriété de classe CustomerID (Original).

  19. Cliquez sur OK.

Remarque

Bien qu’il ne s’agit pas d’un problème pour cette procédure pas à pas particulière, il est important de noter que LINQ to SQL gère automatiquement les valeurs générées par la base de données pour l’identité (incrément automatique), rowguidcol (identificateur global global unique généré par la base de données) et les colonnes d’horodatage pendant les insertions et les mises à jour. Les valeurs générées par la base de données dans d’autres types de colonnes entraînent de façon inattendue une valeur Null. Pour renvoyer les valeurs générées par la base de données, vous devez définir IsDbGeneratedtrue manuellement l’une AutoSync des valeurs suivantes : AutoSync.Always, AutoSync.OnInsert ou AutoSync.OnUpdate.

Tester l’application

Réexécutez l’application pour vérifier que la procédure stockée UpdateCustomers met correctement à jour l’enregistrement client dans la base de données.

  1. Appuyez sur F5.

  2. Modifiez un enregistrement dans la grille pour tester le comportement de mise à jour.

  3. Ajoutez un nouvel enregistrement pour tester le comportement d’insertion.

  4. Cliquez sur le bouton Enregistrer pour enregistrer les modifications apportées à la base de données.

  5. Fermez le formulaire.

  6. Appuyez sur F5 et vérifiez que l’enregistrement mis à jour et l’enregistrement nouvellement inséré sont conservés.

  7. Supprimez le nouvel enregistrement que vous avez créé à l’étape 3 pour tester le comportement de suppression.

  8. Cliquez sur le bouton Enregistrer pour envoyer les modifications et supprimer l’enregistrement supprimé de la base de données.

  9. Fermez le formulaire.

  10. Appuyez sur F5 et vérifiez que l’enregistrement supprimé a été supprimé de la base de données.

    Remarque

    Si votre application utilise SQL Server Express Edition, en fonction de la valeur de la propriété Copy to Output Directory du fichier de base de données, les modifications peuvent ne pas apparaître lorsque vous appuyez sur F5 à l’étape 10.

Étapes suivantes

Selon vos besoins en matière d’application, vous pouvez effectuer plusieurs étapes après avoir créé des classes d’entité LINQ to SQL. Voici quelques améliorations que vous pouvez apporter à cette application :