2010-05-02 4 views
3

EF 모델로 가져 오는 테이블이 두 개 있습니다.
첫 번째 테이블에는 두 번째 테이블에 대한 외래 키 역할을하는 [섹션] 속성이 있습니다. 내가 그것을 전달 모델에서이 속성을 제거하면Entity Framework 모델 및 외래 키 속성

Problem in Mapping Fragments starting at lines 158, 174: Non-Primary-Key column(s) [Section] are being mapped in both fragments to different conceptual side properties - data inconsistency is possible because the corresponding conceptual side properties can be independently modified.

,하지만 데이터를 쿼리 할 때 나는이 없어 : 나는 테이블에 모델이 속성을 매핑하고 나는이 오류가 컴파일하려고 섹션 입력란

네비게이션 필드를 사용하고 두 번째 테이블에서이 속성을 읽음으로써 얻을 수 있지만 작동하게하려면 다른 테이블을 내 쿼리에 포함시켜야합니다.

var res = from name in Context.Table1.Include("Table2")... 

왜 한 필드에만 연관을 포함해야합니까?

UPDATE
이 좀 더 명확하게하려면 :

표 1은 필드가 있습니다
항목 Id - 섹션
키 - 외래 키
제목을

표 2 필드가 있습니다 :
SectionId - 키
이름

연관을 설정할 때 첫 번째 테이블의 섹션 속성을 제거해야합니다.

답변

0

EF 4에서는 FK associations을 사용할 수 있습니다.

var t1 = GetT1(); 
var section = (int)t1.SectionReference.EntityKey.Values[0].Value; 
: 그것은 키 속성이 있다면

var q = from t1 in Context.Table1 
     where //... 
     select new 
     { 
      T1 = t1, 
      Section = t1.Section.SectionId 
     }; 
var section = q.First().Section; 

, 당신은 EntityKey를 통해 값을 얻을 수 있습니다 : EF 1 관련 테이블에서 하나 개의 필드를 얻을 수있는 가장 쉬운 방법으로

는 프로젝트입니다

일반적으로 나는이 마지막 방법을 좋아하지 않습니다. EF에만 해당하므로 MergeOption 검색어가 NoTracking으로 설정된 경우 오류가 발생합니다.

+0

무엇이 t1.Section입니까? 그것은 외래 키 속성입니까? 그렇다면 나는 그것을 가지고 있지 않습니다. – verror

+0

오류 메시지에있는 내용이므로 필드가 '섹션'이라고합니다. 내가 잘못 추측했을 수도있다. 스키마를 표시하지 않으므로 알기 어렵습니다. 실제 키 특성으로 대체하십시오. 이 질문을 명확하게하기 위해 쿼리를 조정 해 보겠습니다. –

+0

예, 해당 섹션은 있지만 거기에 있지 않습니다. 테이블을 가져 와서 연관을 만들 때 제거해야하므로 키를 누를 때 발생합니다., intelisence에는이 속성이 없습니다. – verror

1

기본 키는 무엇이며 생성 된 스토어는 무엇입니까? 나는 당신이 어딘가 PK 또는 신원을 잃어버린 것 같아요.

팁 : 매핑 문제가있을 때 하나의 대안은 EDMX 디자이너에서 원하는 모델을 만든 다음 데이터베이스를 생성하도록 요청하는 것입니다. 작성한 내용과 SQL로 작성한 내용을 비교하면 실수를 쉽게 찾아 낼 수 있습니다.

관련 문제