3

Il s'agit plus ou moins d'une question générale et non d'un ORM ou d'un langage en particulier: cette question survient quelle que soit votre préférence ORM. Lors du mappage d'une relation plusieurs-à-plusieurs, il est possible de masquer la table intermédiaire ou de faire de la table intermédiaire une partie de votre modèle. Dans le cas où la table intermédiaire a des données précieuses au-delà de la relation, comment gérez-vous le mappage?Relations ORM et plusieurs-à-plusieurs

Tenir compte des tableaux suivants:

CaseWorker (id, first_name, last_name) 
CaseWorkerCases (case_worker_id, case_id, date_opened, date_closed) 
Case (id, client_id, field_a, field_b) 

En tant que programmeur, je voudrais vraiment plutôt être en mesure de le faire:

CaseWorker.Cases 

que

CaseWorker.CaseWorkerCases.Cases 

D'une part, la table CaseWorkerCases contient des données utiles et le fait de masquer la table intermédiaire rend l'accès à ces données inférieur à celui prévu NT. D'un autre côté, le fait de devoir naviguer dans la table intermédiaire rend la tâche commune d'accès aux dossiers difficile.

Je suppose qu'une solution pourrait être d'exposer la table intermédiaire dans le modèle, puis de donner à l'objet CaseWork une propriété wrapper qui pourrait fonctionner. Quelque chose comme:

public IEnumerable<Case> Cases 
{ 
    get{return (from caseWorkerCase in this.CaseWorkerCases 
       select caseWorkerCase.Case);} 
} 

Mais cela semble également faux.

+0

J'utilise un DDD. La plus grande partie est cachée derrière une couche de service. J'ai travaillé sur un projet où les tables intermédiaires étaient cachées. Cela entraîne des problèmes lorsque les requêtes Linq ont besoin de données provenant des tables intermédiaires et lorsque vous avez besoin de transmettre ces données au présentateur/à la vue (par exemple, GridView affichant tous les cas ouverts, le travailleur social et la date d'ouverture du dossier). Pour ce projet, je prends l'approche à deux niveaux, mais je ne suis pas un fan du code "laid" qu'il produit. – mlindegarde

Répondre

0

Je ne pense pas que votre solution de contournement est incorrecte. Les complexités de ces modèles doivent être codées quelque part.

J'ai un blog sur ce sujet précis: Many-to-many relationships with properties

1

Je considère les mappages plusieurs-à-plusieurs comme une simple abréviation de notation pour deux mappages un-à-plusieurs avec la table intermédiaire, comme vous l'appelez, permettant la simplification des relations. Cela ne fonctionne que lorsque les relations n'ont pas d'attributs propres. Cependant, à mesure que la compréhension du domaine particulier s'améliore, je trouve généralement que les mappages plusieurs-à-plusieurs doivent généralement être décomposés pour permettre aux attributs d'être attachés. Donc, mon approche habituelle de nos jours est toujours d'utiliser simplement des mappings un-à-plusieurs pour commencer.

Questions connexes