2010-06-03 3 views
5

페이지 테이블과 뷰 테이블이 있습니다. 이 둘 사이에는 PageView 테이블을 통해 많은 관계가 있습니다. 불행하게도이 모든 테이블에는 복합 키가 있어야합니다 (비즈니스상의 이유로).Entity Framework에서 many-many 관계의 복합 외래 키 매핑

  • 페이지 (PageCode 버전)의 기본 키,
  • 보기 (ViewCode 버전)의 기본 키가 있습니다.
  • 분명히 PageView에는 PageCode, ViewCode 및 Version이 충분합니다. 보는
  • 페이지에 FK은 (PageCode, 버전)와 FK은 (ViewCode 버전)

이해하고 작품을 만든다,하지만 내가 엔티티 프레임 워크에서이지도를 할 때 나는

를 얻을 수

오류 3021 : 매핑 단편의 문제 ... 표 페이지 뷰의 다음 열의 각 여러 개념적 측면 속성에 매핑된다 PageView.Version은 (PageView_Association.View.Version, PageVi에 매핑 ew_Association.Page.Version) 그래서 충분히 명확하게

는 EF는이 버전의 열이 두 외래 키의 공통 요소 것에 대해 불만을 가지고있다.

분명히 내가 조인 테이블에서 PageVersion 및 ViewVersion 열을 만들 수는 있지만 그런 종류의 제약 조건은 페이지와 뷰가 동일한 Version 값을 가져야한다는 제약을 상쇄합니다.

누구든지이 문제가 발생 했습니까? 내가 할 수있는 일이 있습니까? 감사!

답변

3

많은 읽기와 뒤죽박죽을 한 후에, 이것은 많은 관계로 작업 할 때 EF 디자이너와 유효성 검사기의 한계에 불과합니다.

1

nHibernate를 사용 하시겠습니까? :) 또는 적어도 DB에 단순한 조인 이상의 다른 것. 임 EF4와 함께 일하고 그것은 복잡한 데이터 그래프 IMO, 지금은 성숙한 것 같습니다. 잘만되면 그것은 거기에 도착할 것이다!

+1

4 년 후 EF는 여전히 따라 잡고 있습니다. http://entityframework.codeplex.com/workitem/864 – granadaCoder

6

이 문제에 대한 Entity Framework의 해결책을 모르지만 임시 키 열을 테이블에 추가하고 복합 키처럼 작동하려는 필드에 고유 한 제약 조건을 추가하는 것이 좋습니다. 이렇게하면 데이터의 고유성이 보장되지만 기본 키 열은 하나만 유지됩니다. 난 당신이 대리 키를 사용해야 쓰려고했다 stackoverflow question

건배

+0

링크를 이용해 주셔서 감사합니다. 이 시점에서 데이터베이스 디자인을 검토 할 수있는 옵션이 없지만 EF가 가지고있는 것과 함께 작업 할 수 있는지 여부에 더 관심이 있습니다. 나는 당신의 대답을 좋아하고 처음에 문제를 발견했을 때 내가 생각하고 있었던 것이었다. +1 –

2

을,하지만 난이 실제로 도움이 될 것입니다 생각하지 않습니다 프로 사기꾼 인수는이 주제에서 찾을 수 있습니다. 조인 테이블은 엔티티의 논리적 특성을 기반으로 비즈니스 규칙을 적용합니다. 페이지 및 뷰에 서로 게이트 키가 추가 된 경우에도 이러한 동일한 속성이 조인 테이블에 저장됩니다.

제약 조건을 지원하는 서버에서 실행중인 경우 버전을 PageVersion 및 ViewVersion으로 분리하고 두 버전이 동일하다는 제약 조건을 추가하거나 INSERT/UPDATE 트리거를 사용하여이를 적용 할 수 있습니다.

나는 의도를 오해했을 수도 있지만,이 디자인으로는 옳지 않은 것으로 느껴집니다. 페이지 및보기가 변경되고 새 버전이 생성 될 때 버전 관리가 어떻게 작동하는지 상상할 수 없습니다. 페이지를 변경하면 새로운 버전을 얻는다는 의미 일뿐만 아니라 해당 버전에서 변경되지 않은보기에 대해서도 모든 새로운보기가 만들어지게됩니다.마찬가지로 페이지의보기 하나가 변경되면보기의 버전도 변경되므로 페이지의 버전도 변경되어야하므로 페이지의 다른보기도 페이지 및보기 버전과 일치해야합니다. 이게 옳은 것 같니?

+0

네, 맞습니다. 새로운보기 란 새로운 페이지를 의미하는 새 버전을 의미합니다. 즉, 각 버전마다 페이지 및 뷰 세트가 있어야합니다. –