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.
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