Accueil

EF5 : Créer une association fictive

by Jean-Camille Mercier 9. octobre 2013 10:28

Pourquoi une liaison fictive ? J'ai déjà eu le cas deux fois :

  1. Impossible de faire une vraie FK en BDD, exemple : une liaison entre une vue et une table
  2. La modélisation de la BDD impose un chemin trop long en objet

C'est ce dernier cas que je vais détailler ici. Nous avons deux entités dérivées : FraisDeSoin et Prestataire qui sont rattachées par leurs entités parentes : Facture et Emetteur.

 Pour obtenir le "Finess" du prestataire d’un frais de soin, nous sommes donc obligé de caster ainsi : ((Prestataire)fs.Emetteur).Finess

L’idée est donc d’ajouter un « chemin » (vert) dans l’edmx pour simplifier l’accès (rouge) : 

 Voici comment faire en 3 étapes :

 1- Ajouter l’association avec un click droit sur l’entité, puis « Add New / Association … »
Il faut sélectionner chaque « End » puis renseigner les cardinalités dans le bon sens,
Ici 1 prestataire possède plusieurs frais de soin :

 

2- Renseigner la contrainte dans les propriétés de l’association. 
Il faut sélectionner l’association puis ouvrir la boite de contrainte :

 

3- Renseigner la Foreign Key sur laquelle on se base pour faire l’association
Ici c’est EmetteurId qui est l’Id du prestataire

 

EF va alors créer les deux propriétés de navigation et va activer le lasy-loading sur cette nouvelle association comme si on avait une FK classique en BDD ! On va donc pouvoir écrire fs.Prestataire.Finess à la place de ((Prestataire)fs.Emetteur).Finess .

A savoir aussi que gràce à cette astuce, vous pouvez maintenant faire des "Includes" dans vos requêtes, et vous pouvez activer les filtres, les tries, les groupes dans les colonnes des DataGrid ce qui était précédemment impossible !