Vue d'ensemble de la mise à jour hiérarchique

Mise à jour : novembre 2007

La mise à jour hiérarchique fait référence au processus d'enregistrement des données mises à jour d'un groupe de données avec au moins deux tables connexes dans une base de données tout en maintenant l'intégrité référentielle. L'intégrité référentielle fait référence aux règles de cohérence fournies par les contraintes de clé étrangère dans une base de données qui contrôlent le comportement des enregistrements connexes d'insertion, de mise à jour et de suppression. Par exemple, l'intégrité référentielle impose la création d'un enregistrement de client avant la création de commandes pour ce client.

Lorsque les développeurs créaient des applications de données dans Visual Studio 2005 et les versions antérieures, le code généré automatiquement enregistrait les données modifiées uniquement dans la première table déplacée à partir de la fenêtre Sources de données. Lors du déplacement de tables supplémentaires à partir de la fenêtre Sources de données, les utilisateurs devaient ajouter manuellement le code pour enregistrer les modifications de ces tables dans la base de données. Les utilisateurs devaient non seulement ajouter le code pour appeler la méthode TableAdapter.Update pour chaque table, mais la logique devait être incorporée pour exécuter les insertions, les mises à jour et les suppressions spécifiques dans l'ordre approprié pour chaque table afin d'éviter de violer l'intégrité référentielle. Par exemple, les nouveaux clients doivent être enregistrés avant d'ajouter leurs commandes et les commandes doivent être supprimées avant de supprimer un client existant.

Dans Visual Studio 2008, les groupes de données typés sont améliorés par un nouveau composant TableAdapterManager. TableAdapterManager réduit le code requis pour enregistrer des données dans plusieurs tables connexes de plusieurs routines avec de nombreuses lignes de code à un appel de méthode unique : TableAdapterManager.UpdateAll(TypedDataset). Le TableAdapterManager fournit toute la logique sous-jacente requise pour maintenir l'intégrité référentielle pendant les opérations de mise à jour (enregistrement) entre le groupe de données et la base de données. Pour plus d'informations, consultez Vue d'ensemble de TableAdapterManager.

Activation de la mise à jour hiérarchique dans un groupe de données

Par défaut, la mise à jour hiérarchique est activée pour tous les nouveaux groupes de données qui sont ajoutés ou créés dans un projet. Activez ou désactivez la mise à jour hiérarchique en affectant la valeur True ou False à la propriété Mise à jour hiérarchique d'un groupe de données typé dans le Concepteur de DataSet. Pour plus d'informations, consultez Comment : activer et désactiver la mise à jour hiérarchique.

Contraintes de clé étrangère, mises à jour et suppressions en cascade

Il est important de comprendre comment les contraintes de clé étrangère et le comportement en cascade dans la base de données sont créés dans le code du groupe de données généré.

Par défaut, les tables de données dans un groupe de données sont générées avec des relations (DataRelation) qui correspondent aux relations dans la base de données. Toutefois, la relation dans le groupe de données n'est pas générée comme une contrainte de clé étrangère. Le DataRelation est configuré en tant que Relation uniquement sans un UpdateRule ou un DeleteRule en vigueur.

Par défaut, les mises à jour et les suppressions en cascade sont désactivées même si les mises à jour et/ou les suppressions en cascade sont activées dans la relation de base de données. Par exemple, la création d'un nouveau client et d'une nouvelle commande, puis une tentative d'enregistrement des données peut provoquer un conflit avec les contraintes de clé étrangère définies dans la base de données. Pour plus d'informations, consultez Comment : configurer des contraintes de clé étrangère dans un groupe de données.

Définition de l'ordre d'exécution des mises à jour

La définition de l'ordre d'exécution des mises à jour permet de configurer l'ordre des insertions, mises à jour et suppressions individuelles requises pour enregistrer toutes les données modifiées dans toutes les tables d'un groupe de données. Lorsque la mise à jour hiérarchique est activée, les insertions sont exécutées en premier, puis les mises à jour, et enfin les suppressions. Le TableAdapterManager fournit une propriété UpdateOrder qui peut être configurée pour exécuter tout d'abord les mises à jour, puis les insertions et enfin les suppressions.

Remarque :

Il est important de comprendre que l'ordre de mise à jour est entièrement inclusif. Cela signifie que lorsque les mises à jours sont effectuées, les insertions, puis les mises à jour et enfin les suppressions sont exécutées pour toutes les tables dans le groupe de données.

Pour définir la propriété UpdateOrder après avoir fait glisser des éléments de la Sources de données, fenêtre sur un formulaire, cliquez sur le TableAdapterManager dans la barre d'état des composants et définissez la propriété UpdateOrder dans la fenêtre Propriétés. Pour plus d'informations, consultez Comment : définir l'ordre lors de l'exécution d'une mise à jour hiérarchique.

Création d'une copie de sauvegarde d'un groupe de données avant d'exécuter une mise à jour hiérarchique

Lorsque vous enregistrez des données (en appelant la méthode TableAdapterManager.UpdateAll() ), le TableAdapterManager essaie de mettre à jour les données pour chaque table dans une transaction unique. Si une partie de la mise à jour, quelle qu'elle soit, échoue pour une table quelconque, la transaction entière est restaurée. Dans la plupart des cas, la restauration de la transaction rétablit l'état d'origine de votre application. Toutefois, vous pouvez parfois souhaiter restaurer le groupe de données à partir de la copie de sauvegarde. Cela peut se produire lorsque vous utilisez des valeurs incrémentées automatiquement. Par exemple, si une opération de sauvegarde n'est pas réussie, les valeurs incrémentées automatiquement ne sont pas réinitialisées dans le groupe de données et le groupe de données continue à créer des valeurs incrémentées automatiquement. Cela entraîne un écart dans la numérotation qui pourrait ne pas être supporté par votre application. Lorsque cela constitue un problème, le TableAdapterManager fournit une propriété BackupDataSetBeforeUpdate qui remplace le groupe de données existant par une copie de sauvegarde si la transaction échoue.

Remarque :

La copie de sauvegarde est uniquement en mémoire pendant l'exécution de la méthode TableAdapterManager.UpdateAll. Par conséquent, aucun accès par programme à ce groupe de données de sauvegarde n'est disponible parce qu'il remplace le groupe de données d'origine ou est hors de portée dès que l'exécution de la méthode TableAdapterManager.UpdateAll est terminée.

Voir aussi

Tâches

Procédure pas à pas : enregistrement des données de tables de données connexes (Mise à jour hiérarchique)

Concepts

Nouveautés des données

Vue d'ensemble de TableAdapterManager

Autres ressources

Enregistrement des données

Mise à jour hiérarchique