3

이것은 일반적인 질문이나 특정 ORM이나 언어와 관련이 없습니다.이 질문은 ORM 환경 설정에 관계없이 나타납니다.ORM과 다 대다 관계

다 대다 관계를 매핑 할 때 중개 테이블을 모호하게 만들거나 중개 테이블을 모델의 일부로 만들 수 있습니다. 중개 테이블에 관계가 넘치는 중요한 데이터가있는 경우 어떻게 매핑을 처리합니까?

CaseWorker.Cases 

한편으로

CaseWorker.CaseWorkerCases.Cases 

보다, 테이블을 : 정말 대신 할 수있을 것이다 프로그래머로

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

:

은 다음 표를 고려 CaseWorkerCases는 유용한 데이터를 포함하고 있으며 중개 테이블을 숨기면 해당 데이터에 액세스 할 수 없게됩니다. nt. 반면에 중개 테이블을 탐색해야하는 경우 Cases에 액세스하는 일반적인 작업이 어색해 보입니다.

하나의 해결책은 모델에서 중간 테이블을 노출 한 다음 작동 할 수있는 래퍼 속성을 제공하는 CaseWork 객체를 제공하는 것입니다. 예 :

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

하지만 잘못된 것 같습니다.

+0

나는 DDD를 사용하고 있습니다 :

나는이 정확한 주제에 대한 블로그 게시물이 있습니다. 이것의 대부분은 서비스 레이어 뒤에 숨겨져 있습니다. 중개 테이블이 숨겨진 프로젝트에서 일했습니다. 이로 인해 Linq가 중개 테이블의 데이터를 필요로하고 데이터를 발표자/뷰 (예 : 모든 열린 사례, 사례 작업자 및 사례가 열렸던 날짜를 보여주는 GridView)로 가져와야 할 때 문제가 발생했습니다. 이 프로젝트에서 2 단계 접근 방식을 사용하고 있지만 제작하는 "추악한"코드의 팬이 아닙니다. – mlindegarde

답변

1

다차원 매핑은 중간 테이블과의 2 개의 일대 다 매핑을 표기하는 약어로 간주합니다.이 매핑을 사용하면 관계를 단순화 할 수 있습니다. 관계가 자신의 속성을 가지고 있지 않은 경우에만 작동합니다. 그러나 특정 도메인에 대한 이해가 향상됨에 따라 일반적으로 속성을 첨부 할 수 있도록 다 대 다 매핑을 세분화해야합니다. 그래서 저는 항상 일대 다 매핑을 사용하여 시작하기 만하면됩니다.