내 웹 호스트에 Framework 4.0이 아직 없기 때문에 EF 버전 1에서 엔터티 데이터 모델을 작성해야합니다. 아래는 문제를 보여주는 간단한 예입니다.Entity Framework v.1의 외래 키 관계
나는 3 개의 테이블, 1 개의 Users 테이블, 다른 Webpages 테이블 및 방문이있는 테이블을 가지고 있습니다. 앞의 두 테이블은 Visits 테이블과 일대 다 관계를 가지고 있습니다 (기본적으로 다 대다 관계로 작동하며 Visits 테이블에는 고유 기본 키와 추가 필드가 있습니다)
4.0 버전이 작동하지만 v.1에서는 작동하지 않습니다. "방문수"의 수가 0이므로 테스트 문자열은 ""을 반환합니다 ... 이유는 무엇이며 어떻게 v.1의 외래 키 릴레이션에 액세스 할 수 있습니까?
UsersEntities context = new UsersEntities();
var users = context.Users;
string result = "";
foreach (var user in users)
{
foreach (var visit in user.Visits)
{
result += visit.Webpage.Url + "\n";
}
}
는 그래서 foreach 루프는 확인을 얻는 사용자를 통해 루프하지만, 반환에는 방문이 없기 때문에 내부 루프는 입력하지 않습니다. 다시, Framework 4.0에서는 동일한 데이터베이스를 사용하여 정상적으로 작동합니다.
무엇이 잘못 되었나요?
좋아요 작동! 고마워, 고마워! 몇 가지 질문 : 이것이 필요한 이유는 무엇입니까? Linq에서 Sql이 필요하지 않고 v.4.0이 아니기 때문에 4.0에서 수정되었거나 "Include"의 목적이 무엇입니까? 또한 이와 같은 데이터 모델을 탐색 할 때 많은 단계 ("점")를 필요로하는 객체를 가로 질러 트래버스해야합니다. 나는 최소한의 지식의 원리, 또는 당신이 이것을 피해야한다고 말하는 "Demeter의 법칙"을 생각하고 있습니다. 이게 문제 야? 그렇지 않으면 어떻게해야하는지 모르겠다. (디자인 원리에 대해 더 많이 배우려고하기 때문에 물어 본다.) – Anders
L2S에서 네비게이션에 액세스하면 자동으로로드됩니다 - 일명 lazyloading. Demeter의 법률에 관해서는, 나는이 위반을 피하기 위해 네비게이션을 무너 뜨릴 수있는 ORM을 아직 보지 못했습니다. x.Y.Z 대신 x.YZ –
사전에 데이터가 필요하다는 것을 알고있을 때 Include를 사용하면 많은 결과를 되돌릴 때 유용하며 일부 결과에서만 관련 항목이 필요할 수 있습니다. 나는. 모든 데이터를 앞쪽으로 끌어 당기는 것은 낭비입니다. –