Introduction aux objets DataRelation
Les groupes de données qui contiennent des tables de données connexes utilisent des objets DataRelation pour représenter une relation parent/enfant entre les tables, et pour retourner des enregistrements connexes de l'une et l'autre. L'ajout de tables connexes aux groupes de données à l'aide de l'Assistant Configuration de source de données ou du Concepteur de DataSet entraîne la création et la configuration automatiques de l'objet DataRelation. Pour plus d'informations sur la façon de retourner des enregistrements connexes, consultez Comment : accéder aux enregistrements dans les DataTables connexes. Pour plus d'informations sur la création de relations de données, consultez Comment : créer des DataRelations avec le Concepteur de DataSet.
L'objet DataRelation exécute deux fonctions :
Il peut rendre disponibles les enregistrements reliés à l'enregistrement avec lequel vous travaillez. Il fournit des enregistrements enfants si vous êtes dans un enregistrement parent ()GetChildRows et un enregistrement parent si vous utilisez un enregistrement enfant (GetParentRow).
Il peut appliquer des contraintes d'intégrité référentielle, en imposant par exemple la suppression des enregistrements enfants lorsque l'enregistrement parent est lui-même supprimé.
Il est important de comprendre la différence entre une vraie jointure et la fonction d'un objet DataRelation. Dans une vraie jointure, les enregistrements sont extraits des tables parentes et enfants et placés dans un simple recordset. En revanche, lorsque vous utilisez un objet DataRelation, aucun recordset n'est créé. L'objet suit la relation entre les tables et garde synchrones les enregistrements parents et enfants.
Contraintes des objets DataRelation
Un objet DataRelation peut également être utilisé pour créer et appliquer les contraintes suivantes :
Contrainte unique garantissant qu'une colonne de la table ne contient pas de doublons.
Contrainte de clé étrangère qui peut être utilisée pour maintenir l'intégrité référentielle entre une table parente et une table enfant à l'intérieur d'un groupe de données.
Les contraintes que vous spécifiez dans un objet DataRelation sont automatiquement implémentées lorsque vous créez les objets appropriés ou définissez des propriétés. Si vous créez une contrainte de clé étrangère à l'aide de l'objet DataRelation, des instances de la classe ForeignKeyConstraint sont ajoutées à la propriété ChildKeyConstraint du DataRelation.
Pour implémenter une contrainte unique, il suffit d'affecter à la propriété Unique d'une colonne de données la valeur true ou d'ajouter une instance de la classe UniqueConstraint du ParentKeyConstraint de l'objet DataRelation. Pour plus d'informations sur l'interruption de contraintes dans un groupe de données, consultez Comment : désactiver les contraintes pendant le remplissage d'un groupe de données.
Règles d'intégrité référentielle
Dans la contrainte de clé étrangère, vous pouvez spécifier des règles d'intégrité référentielle qui sont appliquées dans trois cas :
lorsqu'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 définir sont spécifiées dans l'énumération Rule et énumérées dans le tableau suivant.
Règle de contraintes de clé étrangère |
Action |
---|---|
La modification (mise à jour ou suppression) apportée à l'enregistrement parent est également reportée dans les enregistrements connexes de la table enfant. |
|
Les enregistrements enfants ne sont pas supprimés, mais leur clé étrangère prend la valeur DBNull. Avec ce paramètre, les enregistrements enfants peuvent rester « orphelins » (autrement dit, ils n'ont plus de relation avec des enregistrements parents).
Remarque
L'utilisation de cette règle peut produire des données non valides dans la table enfant.
|
|
La clé étrangère des enregistrements enfants connexes prend sa valeur par défaut (telle qu'elle est définie par la propriété DefaultValue de la colonne). |
|
Aucune modification n'est apportée aux enregistrements enfants connexes. Avec ce paramètre, les enregistrements enfants peuvent finir par contenir des références à des enregistrements parents non valides. |
Pour plus d'informations sur les mises à jour dans les tables de groupes de données, consultez Enregistrement de données dans des groupes de données.
Relations servant uniquement à l'application de contraintes
Lorsque vous créez un objet DataRelation, vous avez la possibilité de spécifier que la relation ne sera utilisée que pour appliquer des contraintes (autrement dit, elle ne sera pas utilisée pour accéder aux enregistrements connexes). Cette option vous permet de générer un groupe de données légèrement plus efficace et qui contient un peu moins de méthodes qu'un groupe de données doté de la capacité d'accéder aux enregistrements connexes. Toutefois, avec un tel groupe de données, vous n'avez plus accès aux enregistrements connexes. Par exemple, une relation de contrainte uniquement vous empêche de supprimer un enregistrement parent possède toujours des enfants, et vous ne pouvez pas accéder aux enregistrements enfants par l'intermédiaire du parent.
Voir aussi
Référence
Configuration de source de données (Assistant)
Concepts
Utilisation de groupes de données dans Visual Studio