Domanda

Questo è più o meno una domanda di carattere generale e non di qualsiasi specifica ORM o la lingua, in particolare: a questa domanda arriva a prescindere dalla vostra preferenza ORM.

Quando la mappatura una relazione molti-a-molti, è possibile oscurare la tabella intermedia o per fare la tabella intermedia una parte del modello. Nel caso in cui la tabella di intermediario ha dati importanti al di là del rapporto, come si fa a gestire la mappatura?

Si consideri il seguente tabelle:

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

Come programmatore avrei davvero preferito essere in grado di fare:

CaseWorker.Cases

di

CaseWorker.CaseWorkerCases.Cases

Da un lato, i CaseWorkerCases tabella contiene dati utili e nascondere la tabella intermedia rende l'accesso che i dati meno conveniente. Dall'altro, dover passare attraverso la tabella intermedia rende il compito comune per accedere Casi sembra scomodo.

I supose una soluzione potrebbe essere quella di esporre la tabella intermedia nel modello e poi dare l'oggetto casework una proprietà involucro potrebbe funzionare. Qualcosa di simile:

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

Ma che sembra anche sbagliato.

È stato utile?

Soluzione

Non credo che la tua soluzione è sbagliata. La complessità di questi modelli devono essere codificati qualche parte .

Ho un post su questo argomento esatto: molti-a-molti con proprietà

Altri suggerimenti

I riguardano molti-a-molti mappature come solo un abbreviazione di notazione per due mappature uno-a-molti con la tabella intermedia, come lo chiami tu, consentendo la semplificazione dei rapporti. Funziona solo se le relazioni non hanno attributi dei loro propri. Tuttavia, come la comprensione del particolare dominio migliora, di solito trovo che molti-a-molti mappature di solito devono essere ripartiti per consentire gli attributi da allegare. Quindi il mio approccio al solito in questi giorni è quello di sempre è sufficiente utilizzare uno-a-molti mappature per cominciare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top