2013-02-23 2 views
0

EF 코드 우선 및 유창한 구성으로 많은 수의 realtionships를 구성하는 방법에 대해 많이 읽었습니다. 하지만 왜 Junction 테이블에 대한 추가 엔티티를 작성해야하는지 이해할 수 없습니다. 다음 엔터티가 있다고 가정 해 보겠습니다.EF 코드 처음 엔티티가없는 다 대 다 관계

Department 
---------- 
Id 
Name 

Material 
---------- 
Id 
Name 

이제 각 부서의 자료를 기록하고 싶습니다. 부서, 재료 및 DepartmentMaterial : 그래서 나는 지금까지 내가 3 엔티티를 필요 읽고 무엇

DepartmentMaterial 
------------------- 
DepartmentId 
MaterialId 
Quantity 

이 필요합니다. 그래서 실제로 각 테이블을 DDD에 대해 배우기 시작했을 때 의도하지 않은 해당 엔티티에 매핑하고 있습니다. 나는 EF가 그 접합 테이블을 자동으로 매핑 할 것이고 또한 물질량에 관한 질의가 부서에 대해 수행 될 수 있다고 가정했다.

따라서 EF 코드 우선에서는 추가 엔티티없이 그러한 관계를 유창하게 구성 할 수 있습니까?

답변

1

에만 외래 키 (DepartmentId, MaterialId)가있는 경우 연결부 테이블은 개념 모델 (클래스 모델)에서 벗어날 수 있습니다. 약 약 데이터를 기록하고 싶습니다. 그건 괜찮아요, 그 양은 거기에 속합니다. 부서에는 자재 y의 수량 x이 있습니다. 부서에 수량이 있다고 말하는 것은 의미가 없습니다.

이것은 DDD 원칙에 위배되는 것이 아닙니다. 연관 클래스는 클래스 모델의 일류 시민입니다. 심지어는 특정 부서/재료 조합의 수량을 제한하는 것과 같은 고유 한 동작을 수행 할 수도 있습니다.

이것은 모델에 many-to-many 연관이 아니라 Department 1-n DepartmentMaterial n-1 Material을 포함한다는 것을 의미합니다. 그리고 접합부 테이블을 통해 부서의 자료를 조회해야합니다. 이것은 매우 일반적인 상황입니다. 실생활에서 순수 접합점 테이블을 거의 본적이 없습니다. 그들은 수집가의 물건입니다.

예 질의 :

var query = from d in db.Departments 
      from dm in d.DepartmentMaterials 
      select new { Department = d, Materials = dm.Select(x => x.Material)};