2014-06-18 4 views
0

여기에 이상한 문제가 있습니다.EF6의 LINQ : 두 개의 열 테이블에서 두 번째 참조가 손실됩니다.

내 데이터베이스에는 "NeighbourCountry"라는 테이블이 있습니다. 원본 국가와 관련 이웃 국가로 구성됩니다.

public class NeighbourCountry 
    { 
     [Key] 
     public int NeighbourCountryID { get; set; } 

     public Country Source { get; set; } 

     public Country Neighbour { get; set; } 
    } 

그것은이 패턴처럼 작성된다 : 난 그냥 간단한 방법으로 한 나라의 이웃을 얻고 싶었다 이제

source_a,neighbour_x 
source_a,neighbour_u 
source_a,neighbour_t 
source_b,neighbour_n 
source b,neighbour_p 

: (쉽게 디버깅, 난 그냥 단지를 얻으려고 국가의 FIRST 이웃)

private string GetNeighbours(ApplicationDbContext context, Country paracountry) 
     { 
      var neighbours = context.NeighbourCountries.Where(b => b.Source.CountryID == paracountry.CountryID).FirstOrDefault(); 
      return ""; 
     } 

그리고 지금은 "이웃"위에 마우스를 올려 때,이 얻을 :,enter image description here

보시다시피 원본 국가는 있지만 이웃이 없다고 말합니다. 정확하지 이 데이터베이스는이 데이터로 가득 :

enter image description here

이 경우의 소스 국가 데이터베이스에서 ID 1 와 나라, ID 1 나라 올바르게 나열된 그 이웃과.

다른 방법으로 시도해 보았을 때 원본 대신 이웃 사람에게 직접 LINQing하면 동일한 시나리오를 얻었습니다. 내가 말했듯이

var neighbours = context.NeighbourCountries.Where(b => b.Neighbour.CountryID == paracountry.CountryID).FirstOrDefault(); 

, 나는이 얻을 : enter image description here

그래서 Linq에이 이웃을 찾을 수 없지만, 지금은 첫 번째 관련된 소스 국가를 찾을 수 없습니다. 소스 국가 및 이웃 나라를 연결할 수없는 것 같습니다.

문제의 원인을 알고 있습니까?

정말 고마워요!

답변

1

게으른로드 문제입니다.

당신은

context.NeighbourCountries 
     .Include(m => m.Neighbour) 
     .Include(m => m.Source) 
     .Where(b => b.Neighbour.CountryID == paracountry.CountryID).FirstOrDefault(); 

(사실, where 절에있는 관련 엔터티를 포함해야하지만하지 않습니다는 그 수에 포함하여, 이웃과 소스, 열망로드를 검색 할 경우 어쩌면 것들이 더 분명해진다.)

+0

문제가 해결되었습니다. 정말 고마워요! 나는 여기서 무슨 일이 일어나고 있는지, 왜 이것이 작동하는지 이해하지 못하지만 감사합니다. D – Tornister

+1

"게으름로드"와 "열망하는로드"에 대해 goole 시도를하면 도움이 될 것입니다.) –