Partager via


Créer des relations entre des jeux de données dans des applications .NET Framework

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 jeux de données qui contiennent des tables de données associées utilisent DataRelation des objets pour représenter une relation parent/enfant entre les tables et pour retourner des enregistrements connexes les uns des autres. L’ajout de tables associées à des jeux de données à l’aide de l’Assistant de Configuration de la Source de Données, ou du Concepteur de jeux de données, crée et configure l’objet DataRelation pour vous.

L’objet DataRelation exécute deux fonctions :

  • Il peut rendre disponibles les enregistrements liés à un enregistrement avec lequel vous travaillez. Il fournit les enregistrements enfants si vous êtes dans un enregistrement parent (GetChildRows) et un enregistrement parent si vous travaillez avec un enregistrement enfant (GetParentRow).

  • Il peut appliquer des contraintes pour l’intégrité référentielle, telles que la suppression d’enregistrements enfants associés lorsque vous supprimez un enregistrement parent.

Il est important de comprendre la différence entre une véritable jointure et la fonction d’un DataRelation objet. Dans une jointure réelle, les enregistrements sont extraits des tables parente et enfants et placés dans un recordset plat unique. Lorsque vous utilisez un DataRelation objet, aucun nouveau jeu d’enregistrements n’est créé. Au lieu de cela, DataRelation effectue le suivi de la relation entre les tables et conserve les enregistrements parents et enfants synchronisés.

Objets et contraintes « DataRelation »

Un DataRelation objet est également utilisé pour créer et appliquer les contraintes suivantes :

  • Contrainte unique, qui garantit qu’une colonne de la table ne contient aucun doublon.

  • Contrainte de clé étrangère, qui peut être utilisée pour maintenir l’intégrité référentielle entre une table parente et enfant dans un jeu de données.

Les contraintes que vous spécifiez dans un DataRelation objet sont implémentées en créant automatiquement des objets appropriés ou en définissant des propriétés. Si vous créez une contrainte de clé étrangère à l’aide de l’objet DataRelation, les instances de la classe ForeignKeyConstraint sont ajoutées à la propriété ChildKeyConstraint de l’objet DataRelation.

Une contrainte unique est implémentée soit en définissant simplement la propriété Unique d'une colonne de données à true, soit en ajoutant une instance de la classe UniqueConstraint à la propriété ParentKeyConstraint de l'objet DataRelation. Pour plus d’informations sur la suspension des contraintes dans un jeu de données, consultez Désactiver les contraintes lors du remplissage d’un jeu de données.

Règles d’intégrité référentielle

Dans le cadre de la contrainte de clé étrangère, vous pouvez spécifier des règles d’intégrité référentielles appliquées à trois points :

  • Quand un enregistrement parent est mis à jour

  • Lorsqu’un enregistrement parent est supprimé

  • Lorsqu’une modification est acceptée ou rejetée

Les règles que vous pouvez effectuer sont spécifiées dans l’énumération Rule et répertoriées dans le tableau suivant.

Contrainte de contrainte de clé étrangère Action
Cascade La modification (mise à jour ou suppression) apportée à l’enregistrement parent est également effectuée sur les enregistrements associés de la table enfant.
SetNull Les enregistrements enfants ne sont pas supprimés, mais la clé étrangère dans les enregistrements enfants est définie sur DBNull. Avec ce paramètre, les enregistrements enfants peuvent être laissés en tant que « orphelins », c’est-à-dire qu’ils n’ont aucune relation avec les enregistrements parents. Note: L’utilisation de cette règle peut entraîner des données non valides dans la table enfant.
SetDefault La clé étrangère dans les enregistrements enfants associés est définie sur sa valeur par défaut (telle qu’établie par la propriété DefaultValue de la colonne).
None Aucune modification n’est apportée aux enregistrements enfants associés. Avec ce paramètre, les enregistrements enfants peuvent contenir des références à des enregistrements parents non valides.

Pour plus d’informations sur les mises à jour dans les tables de jeux de données, consultez Enregistrer les données dans la base de données.

Relations de contrainte uniquement

Lorsque vous créez un DataRelation objet, vous avez la possibilité de spécifier que la relation doit être utilisée uniquement pour appliquer des contraintes, autrement dit, elle ne sera pas également utilisée pour accéder aux enregistrements associés. Vous pouvez utiliser cette option pour générer un jeu de données légèrement plus efficace et qui contient moins de méthodes qu’une avec la fonctionnalité d’enregistrements associés. Toutefois, vous ne pourrez pas accéder aux enregistrements associés. Par exemple, une relation de contrainte uniquement vous empêche de supprimer un enregistrement parent qui a toujours des enregistrements enfants et vous d’accéder aux enregistrements enfants par le biais du parent.

Création manuelle d’une relation de données dans le Concepteur de jeux de données

Lorsque vous créez des tables de données à l’aide des outils de conception de données dans Visual Studio, les relations sont créées automatiquement si les informations peuvent être collectées à partir de la source de vos données. Si vous ajoutez manuellement des tables de données à partir de l’onglet DataSet de la boîte à outils, vous devrez peut-être créer la relation manuellement. Pour plus d’informations sur la création DataRelation d’objets par programmation, consultez Ajout de DataRelations.

Les relations entre les tables de données apparaissent sous forme de lignes dans le Concepteur de jeux de données, avec un glyphe clé et infini illustrant l’aspect un-à-plusieurs de la relation. Par défaut, le nom de la relation n’apparaît pas sur la surface de conception.

Remarque

Les instructions dans cet article illustrent la version la plus récente de l’expérience de développement interactif (IDE) disponible dans Visual Studio. Votre ordinateur peut afficher des noms ou des emplacements différents pour certains des éléments de l’interface utilisateur. Il se peut que vous utilisiez une autre version de Visual Studio ou d’autres paramètres d’environnement. Pour plus d’informations, consultez Personnaliser l’IDE.

Pour créer une relation entre deux tables de données

  1. Ouvrez votre jeu de données dans le concepteur de jeux de données . Pour plus d’informations, consultez Procédure pas à pas : création d’un jeu de données dans le Concepteur de jeux de données.

  2. Faites glisser un objet Relation de la boîte à outils DataSet vers la table de données enfant de la relation.

    La boîte de dialogue Relation s’ouvre, remplit la zone Table enfant avec la table sur laquelle vous avez déplacé l’objet Relation .

  3. Dans le champ Table parente, sélectionnez la table parente. La table parente contient des enregistrements du côté « un » d’une relation un-à-plusieurs.

  4. Vérifiez que la table enfant correcte s’affiche dans la zone Table enfant. La table enfant contient des enregistrements du côté « plusieurs » d’une relation un-à-plusieurs.

  5. Tapez un nom pour la relation dans la zone Nom ou conservez le nom par défaut en fonction des tables sélectionnées. Il s’agit du nom de l’objet réel DataRelation dans le code.

  6. Sélectionnez les colonnes qui joignent les tables dans les listes Colonnes clés et Colonnes clés étrangères .

  7. Indiquez s’il faut créer une relation, une contrainte ou les deux.

  8. Sélectionnez ou désélectionnez la case Relation imbriquée. Si vous sélectionnez cette option, la propriété Nested est définie sur true et les lignes enfants de la relation sont imbriquées dans la colonne parente quand ces lignes sont écrites comme données XML ou synchronisées avec XmlDataDocument. Pour plus d’informations, consultez Nesting DataRelations.

  9. Définissez les règles à appliquer lorsque vous apportez des modifications aux enregistrements de ces tables. Pour plus d’informations, consultez Rule.

  10. Cliquez sur OK pour créer la relation. Une ligne de relation apparaît sur l'interface de conception entre les deux tables.

Pour afficher un nom de relation dans le Concepteur de jeux de données

  1. Ouvrez votre jeu de données dans le concepteur de jeux de données . Pour plus d’informations, consultez Procédure pas à pas : création d’un jeu de données dans le Concepteur de jeux de données.

  2. Dans le menu Données , sélectionnez la commande Afficher les étiquettes de relation pour afficher le nom de relation. Désactivez cette commande pour masquer le nom de la relation.