Configurer l’héritage à l’aide du Concepteur O/R

Le Concepteur Objet Relationnel (Concepteur O/R) prend en charge le concept d’héritage à table unique qui est souvent implémenté dans les systèmes relationnels. L'héritage à table unique fait appel à une seule table de base de données qui contient des champs pour les informations parent et enfant. Avec les données relationnelles, une colonne de discriminateur contient la valeur qui détermine à quelle classe tout enregistrement appartient.

Prenons par exemple un tableau Persons qui contient tous les employées d'une société. Certaines personnes sont des employés et d'autres des responsables. Le tableau Persons contient une colonne nommée EmployeeType qui a une valeur de 1 pour les responsables et une valeur de 2 pour les employés ; c'est la colonne de discriminateur. Dans ce scénario, vous pouvez créer une sous-classe d'employés et remplir la classe avec uniquement des enregistrements ayant une valeur EmployeeType de 2. Vous pouvez également supprimer les colonnes qui ne s'appliquent à aucune de ces classes.

La création d'un modèle objet qui utilise l'héritage (et correspond aux données relationnelles) peut prêter à confusion. La procédure suivante esquisse les étapes requises pour configurer l’héritage avec le Concepteur O/R. Suivre les étapes génériques sans faire référence à une table existante et aux colonnes risque d'être difficile, c'est pourquoi une procédure pas à pas utilisant des données est proposée. Pour obtenir des instructions détaillées sur la configuration de l’héritage à l’aide du Concepteur O/R, consultez Procédure pas à pas : création de classes LINQ to SQL à l’aide de l’héritage à table unique (Concepteur O/R).

Pour créer des classes de données héritées

  1. Ouvrez le Concepteur O/R en ajoutant un élément Classes LINQ to SQL à un projet Visual Basic ou C# existant.

  2. Faites glisser le tableau à utiliser comme classe de base vers le Concepteur O/R.

  3. Faites glisser une deuxième copie du tableau sur le Concepteur O/R et renommez-le. C'est la classe dérivée, ou sous-classe.

  4. Cliquez sur Héritage sous l’onglet Concepteur Objet Relationnel de la Boîte à outils, puis sur la sous-classe (la table que vous avez renommée) et connectez-la à la classe de base.

    Notes

    Cliquez sur l’élément Héritage dans la Boîte à outils et relâchez le bouton de la souris, cliquez sur la seconde copie de la classe que vous avez créée à l’étape 3, puis cliquez sur la première classe que vous avez créée à l’étape 2. La flèche sur la ligne d'héritage pointe sur la première classe.

  5. Dans chaque classe, supprimez toutes les propriétés d'objet que vous ne souhaitez pas voir apparaître et qui ne sont pas utilisées pour des associations. Vous recevez une erreur si vous tentez de supprimer les propriétés d'objet utilisées pour les associations : The property <property name> cannot be deleted because it is participating in the association <association name>.

    Remarque

    Comme une classe dérivée hérite des propriétés définies dans sa classe de base, les mêmes colonnes ne peuvent pas être définies dans chaque classe. (Les colonnes sont implémentées en tant que propriétés). Vous pouvez activer la création de colonnes dans la classe dérivée en définissant le modificateur d’héritage sur la propriété dans la classe de base. Pour plus d’informations, consultez Notions de base de l’héritage (Visual Basic).

  6. Sélectionnez la ligne d'héritage dans le Concepteur O/R.

  7. Dans la fenêtre Propriétés, affectez à Propriété de discriminateur le nom de colonne qui distingue les enregistrements dans vos classes.

  8. Affectez à la propriété Valeur de discriminateur de classe dérivée la valeur dans la base de données qui désigne l’enregistrement comme type hérité. (Il s'agit de la valeur stockée dans la colonne de discriminateur et qui est utilisée pour désigner la classe héritée.)

  9. Affectez à la propriété Valeur de discriminateur de classe de base la valeur qui désigne l’enregistrement comme type de base. (Il s'agit de la valeur stockée dans la colonne de discriminateur et qui est utilisée pour désigner la classe de base.)

  10. En option, vous pouvez également affecter à la propriété Valeur d’héritage par défaut la désignation d’un type dans une hiérarchie d’héritage utilisée lors du chargement des lignes ne correspondant à aucun code d’héritage défini. En d'autres termes, si une valeur dans la colonne de discriminateur d'un enregistrement ne correspond pas à la valeur de la propriété Valeur de discriminateur de classe dérivée ou Valeur de discriminateur de classe de base, l'enregistrement se charge selon le type désigné comme Valeur d'héritage par défaut.