2012-04-21 4 views
0

EF Code First를 사용하여 기존 DB2 데이터베이스에 매핑합니다. 이것은 일대 다 관계이므로 불행히도 뷰를 쉽게 만들거나 스키마를 변경할 수 없습니다.EF 코드 첫 번째 외래 키 문제

부모 테이블의 스키마 다음 키가 있습니다

Type (char(1)) 
ServiceDate (datetime) 
FormNumber (varchar(8)) 

자식 테이블 (세부 사항)이 다음 키

ServiceDate (datetime) (also a foreign key to ServiceDate on the parent table) 
FormNumber (varchar(8)) (also a foreign key to ServiceDate on the parent table) 
SpecificServiceDate (datetime) 
LineNumber (varchar(8)) 
나는를 만들 유창한 매핑을 사용하고 싶습니다

관계. 내가하는 경우 :

.HasMany(e => e.Details).HasForeignKey(e => new {e.ServiceDate, e.FormNumber}); 

... 키가 기본 키와 일치하지 않는다는 오류가 발생합니다. 이것을 설정하는 방법에 대한 아이디어? 감사.

편집

OK, EF는 기본적으로이 기능을 지원하지 않습니다. 데이터를 지연로드하는 방법이 있습니까?

이것은 차이가 나는 경우 읽기 전용입니다.

+1

나는 그것이 어떻게 작동하는지 잘 모르겠습니다. FormNumber = 1, ServiceDate = 1/1/2013, Type = A 및 FormNumber = 1, ServiceDate = 1/1/2013, Type = B 일 경우 어떻게됩니까? 세부 정보에서 어떤 레코드가 상위 레코드인지 고유하게 선택할 수있는 방법이 없습니다. DB/2가 유일하게 식별 할 수 없을 때 이런 종류의 외래 키 관계를 허용 할 수는 없다고 생각합니다. –

+0

이것은 이전 AS400 시스템에서 벗어 났으며 기본 테이블은 실제로 UNION 뷰이고 외래 키는 다른 것보다 규칙이 더 많습니다. 재미 없어. :-( – bryanjonker

+1

EF는 뷰를 매우 잘 지원하지 않습니다. 특히, EF는 복합 기본 키의 일부로 nullable이 아닌 모든 필드를 처리합니다. 여기서는 관계를 작성할 수 없을 것입니다. –

답변

1

아쉽게도 불가능합니다. EF의 관계는 데이터베이스의 규칙과 동일합니다. 상위 테이블에 기본 키에 세 개의 컬럼이 있으면, 종속 테이블은 외래 키에서 세 개의 컬럼을 가져야합니다. 당신이 ServiceDateFormNumber 고유 키를 표시하지 않고 DB2 이러한 관계를 정의 할 수 있습니다 경우

는 잘 모르겠어요 (이 경우에이뿐만 아니라 PK에서 Type을 할 이유가 없을 것입니다)하지만 당신은 확실히 그것을 정의 할 수 없습니다 EF에 대한 파란색 인쇄 인 SQL 서버에서. 어쨌든 EF는 현재 관계를 형성하는 고유 키를 지원하지 않습니다.

관련 문제