2011-08-03 5 views
0

관계가 고유 한 키 제약 조건을 기반으로하는 여러 테이블이 있습니다.EF 조인 및 MVC 면도기

빠른 예는 다음과 같습니다

VersionId, 버전 이름
SurveyId, SurveyName, VersionId
QuestionId, QuestionName, SurveyId, VersionId

EF 현재 고유 키 제약 조건을 기반으로 관계를 지원하지 않습니다. 질문에 대한 내 색인보기에서 모델에 대한 설문 조사 이름이 포함 된 질문 표를보기 위해 설문 조인을 처리하는 가장 좋은 방법은 무엇입니까?

익명 유형이 필요합니까? db.Questions.Include ("설문 조사")는 아무 것도하지 않는 것 같습니다. 나는 linq를 사용하여 조인 된 테이블의 ViewModel을 만들 수있다. (나는 이것이 갈 방법이라고 생각한다.) 그러나 EF에 많은 것들이있다. & MVC 나는 무엇인가하기 전에 체크 할 것이라고 생각했다.

답변

1

설문 조사 테이블과 질문 테이블에 버전 (예 : VersionID)에 대한 링크가있는 이유는 무엇입니까? 설문 조사를 통해 질문에서 버전에 도달 할 수 없었습니까? 이 아닌 복수의 - 당신이 질문 및 설문 조사 사이의 관계가있는 경우

또한, 다 대일 또는 일대일 (각 질문은 단 하나 명의 설문 조사가 있습니다) 다음은 db.Questions.Include("Survey")해야합니다.

+0

"왜 버전이 문제입니까?"라는 쉬운 대답은 질문에 연결된 버전에 의존하는 다른 테이블이 있다는 것입니다. 말하기, 응답이 질문에 적합한 버전인지 확인하려면 질문 테이블 자체에 버전이 있어야합니다. –

+0

"Include"를 사용하면 결과 엔티티에 대한 추가 속성을 얻지 못합니다. 엔티티 프레임 워크가 고유 키 제약 조건을 인식하지 못하기 때문에 이것이 의심 스럽습니다. 따라서이를 기반으로 외래 키를 건너 뛰거나 무시합니다. –

+0

데이터베이스 자체에 참조 제한 조건을 보장하는 복합 키가 있습니다. 귀하의 질문은 관련 데이터 만 EF 연관 관계로 만들었습니다. 그리고 그것은 마치 챔피언처럼 일했습니다! 그런 다음 스키마를 새로 고쳐야했고 생각 중이었습니다 ... 중복 관계가 데이터베이스에서 해를 끼치 지 않으므로 복합 키와 BAM 대신 단일 키에 합류하는 많은 관계를 추가했습니다. 모든 것이 연결됩니다. EF와 함께. 영감을 주셔서 감사합니다 :-) –

1

우선, 면도기 뷰에서 조인 (또는 실제적으로 다른 논리)이 없습니다. 컨트롤러는 ViewModel을 빌드하는 곳이며 뷰는 ViewModel을 제공하는 수단입니다. 언급 한대로 ViewModel을 만드는 것은 올바른 (올바른) 방법입니다. 그리고 당신은 linq이 결합 된 데이터를 생성하는 절대적으로 일반적인 방법 인 어떤 방법 으로든 그 뷰 모델을 채울 수 있습니다. 그리고 더 나아가려면 조인 로직을 일종의 저장소에 두어야합니다 (예 : 컨트롤러가 아닌 QuestionRepository).

+0

Ahh 질문 저장소는 컨트롤러가 아니므로, 저는 그것을 좋아합니다 :-) 저는 관련 컨트롤러에있는 엔티티와 관련된 모든 로직을 유지하려고 최선을 다했습니다 ... –