2010-07-30 2 views
0

다음 코드에서는 외래 키를 변경하고 있다고 생각하지 않지만 잘못된 것일 수 있습니다. 내가 그것을 실행하면, 나는 예외를 얻을 :ForeignKeyReferenceAlreadyHasValueException 외래 키를 변경하려고하지 않는 경우?

ForeignKeyReferenceAlreadyHasValueException 여기

하면 코드 :

UsersModule um = dc.UsersModules.Where(x => x.UserId == IdParam).FirstOrDefault(); 
int oldModuleId = um.ModuleId; 
string oldModule = um.Module.ModuleName; 

오류는 줄에 발생합니다 :

string oldModule = um.Module.ModuleName 

내가 왜 값을 저장하려고하기 때문에 나는 왜이 오류가 발생하는지 모르겠다. f ModuleName 문자열로 oldModule, 변경되지 않음 um.Module.ModuleName

+0

매니페스트 파일 .dbml 뒤에있는 genereted 코드 파일을 살펴보십시오. 디자이너를 사용하여 L2S 클래스를 추가했다고 가정합니다. getter에 예외가 throw되는지 확인합니다. –

+0

나는 그것을 보았고 getter에 던져진다. – Xaisoft

+0

Im 분실. 나는 이것을 재현하려고 노력했다. 나는 다른 테이블에 외래 키가있는 테이블 두 개를 골라 냈다. B -> A.라고 말하십시오. 그런 다음 B에서 항목을 가져 왔고 B 객체를 통해 A 객체에 액세스하고 이름 (비 키)을 읽으려고했습니다. 이처럼 B b = dc.Bs.First(); 문자열 s = b.A.Name; 그리고 그것은 효과가 .. –

답변

0

LINQ는 관계형 엔터티를 기반으로합니다. 따라서 외부 키 값을 설정/읽을 때마다 외국 엔티티를 설정/읽음으로써 수행해야합니다. 즉, "Module.ModuleName"과 같은 바로 가기가 제대로 작동하지 않습니다.

+0

위의 코드가 작동해야한다고 생각합니다. SQL에 Linq의 멋진 기능 중 하나입니다. 그리고 그는 아무것도 바꾸려하지 않고 단지 가치관을 읽습니다. –

+0

방금 ​​대답을 수정했습니다. 설정이나 읽기는 중요하지 않습니다. –

+0

ok 그래야 가져 오는 동안 오류를 설명하지만 ModuleName은 외래 키가 아닙니다. 외국 법인이 무엇인지 설명해 주시겠습니까? – Xaisoft

관련 문제