Question

Ceci est plus ou moins une question générale et non pas sur une ORM ou un langage spécifique, en particulier: cette question se pose quel que soit votre préférence ORM.

Lors du mappage plusieurs-à-plusieurs, il est possible d'obscurcir la table intermédiaire ou pour faire 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 voulez-vous gérer le mapping?

Tenez 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 cacher la table intermédiaire facilite l'accès à ces données moins pratique. D'autre part, avoir à naviguer dans la table intermédiaire rend la tâche commune d'accès les affaires semblent maladroits.

Je supose une solution pourrait consister à exposer la table intermédiaire dans le modèle, puis donner l'objet CASEWORK une propriété wrapper pourrait fonctionner. Quelque chose comme:

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

Mais cela semble aussi mal.

Était-ce utile?

La solution

I don't think your workaround is wrong. The complexities of these models have to be coded somewhere.

I have a blog post about this exact topic: Many-to-many relationships with properties

Autres conseils

I regard many-to-many mappings as just a notational abbreviation for two one-to-many mappings with the intermediate table, as you call it, enabling simplification of the relationships. It only works where the relationships do not have attributes of their own. However, as understanding of the particular domain improves, I usually find that many-to-many mappings usually need to be broken down to allow attributes to be attached. So my usual approach these days is to always simply use one-to-many mappings to start with.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top