Pregunta

Esta es más o menos una pregunta general y no se trata de ningún ORM o lenguaje específico en particular: esta pregunta aparece independientemente de su preferencia ORM.

Al mapear una relación de muchos a muchos, es posible oscurecer la tabla intermediaria o hacer que la tabla intermediaria sea parte de su modelo. En el caso de que la tabla intermedia tenga datos valiosos más allá de la relación, ¿cómo maneja el mapeo?

Considere las siguientes tablas:

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

Como programador, realmente preferiría poder hacer:

CaseWorker.Cases

que

CaseWorker.CaseWorkerCases.Cases

Por un lado, la tabla CaseworkCasas contiene datos útiles y ocultar la tabla intermediaria hace que el acceso a esos datos sea menos conveniente. Por otro lado, tener que navegar a través de la tabla intermediaria hace que la tarea común de acceder a los casos parezca incómoda.

Supongo que una solución podría ser exponer la tabla intermedia en el modelo y luego darle al objeto de trabajo social que una propiedad de envoltura podría funcionar. Algo como:

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

Pero eso también parece mal.

¿Fue útil?

Solución

No creo que tu solución esté mal. Las complejidades de estos modelos deben codificarse en algún lugar.

Tengo una publicación de blog sobre este tema exacto: MUCHAS A MUCHAS RELACIONES CON PROPIEDADES

Otros consejos

Considero que los mapeos de muchos a muchos son una abreviatura de notación para dos mapeos de uno a muchos con la tabla intermedia, como lo llama, lo que permite la simplificación de las relaciones. Solo funciona donde las relaciones no tienen atributos propios. Sin embargo, a medida que mejora la comprensión del dominio particular, generalmente encuentro que las asignaciones de muchos a muchos generalmente deben descomponerse para permitir que se adjunten los atributos. Entonces, mi enfoque habitual en estos días es simplemente usar siempre mapeos de uno a muchos para comenzar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top