12août 2010

Linq To Entity : utiliser l'héritage dans les modèles Entity

Tout part toujours d'un truc simple : j'ai deux classes l'une est la parente de l'autre. Sauf que je me trouve dans un modèle Entity. Et là, c'est le drame.

J'ai fini par trouver la réponse à toutes les questions (non pas 42). En bref et rapide, il est possible de faire hériter une classe générée par Entity d'une autre. Bienvue sur le TPT Inheritance !

Préparer sa base de données

Le concept d'héritage n'existe pas dans une base de données relationnelle. Une entité est liée à une autre par une association. La factorisation de champs communs à deux entités d'un modèle relationnel se traduit par la création d'une nouvelle entité.

Nous obtenons donc un mapping d'une table pour un type de données. La table People contient les informations communes à tous les gens. La table Student, les informations spécifiques au Student.

On parle donc de TPT ou "Type Per Type Inheritance". C'est à ce moment qu'Entity entre en jeu.

La magie de l'ORM

L'astuce consiste à mapper la table "parente" et la table "enfant" sous un même objet.

Pour cela les deux classe doivent être reliées par une relation 0..1 de clé primaire à clé primaire. En clair : la clé primaire du parent tiens lieu de référence pour la clé étrangère de l'enfant.

Au niveau des champs de la table enfant, la clé étrangère de la table enfant est ... sa clé primaire.

Je ne vais pas détailler les opérations qui permettent de générer le mapping. Tout ceci est détaillé dans les liens suivants :

Je recommande le dernier lien qui décrit en vidéo la création de l'héritage au sein du modèle.

aucun commentaire

Fil des commentaires de ce billet

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.