2011-03-09 2 views
6

다음과 같은 많은 관계 테이블이 있습니다.EF 코드 첫 번째 CTP5, Many to Many 테이블의 Include 메서드 사용

public class Shop{ 
public int Id { get; set; } 
public virtual ICollection<ShopFacility> ShopFacilities { get; set; } 
} 

public class ShopFacility 
{ 
public int Id { get; set; }   
public int ShopId { get; set; } 
public int FacilityId { get; set; } 
public virtual Shop Shop { get; set; } 
public virtual Facility Facility { get; set; } 
} 

public class Facility 
{ 
public int Id { get; set; }   
public virtual ICollection<ShopFacility> ShopFacilities { get; set; } 
} 

및 상점 정보를 얻으십시오.

내가 원하는 것은 문자열 대신에 다 대다 관계에 대해 람다 식으로 Include 메서드를 호출하는 것입니다. 아래 코드와 같이 구현하려고 시도했습니다.

using (var context = new DataContext()) 
{ 
return context.Shops.Include(s => s.ShopFacilities) 
        .Include(s => s.ShopFacilities.Facility) // Cannot compile 
        .First(x => x.Id == id); 
} 

하지만 내가 컴파일 할 수 없다고 생각합니다. 실제로 첫 번째 코드 단편은 잘 작동하므로 기본적으로 괜찮습니다. 근본적인 해결 방법이 있는지 궁금합니다.

어떤 도움을 주시면 감사하겠습니다,

+2

ShopFacility 클래스가 실제로 필요 없다고 말하고 싶습니다. Shop 클래스에는'ICollection '이 있고 시설 클래스에는'ICollection '을 가질 수 있습니다. EF Code First는 다 대다 관계가 필요하다는 것을 이해합니다. –

+2

EF 코드는 처음에는 꽤 똑똑하지만 실제로 ShopFacility에는 의견, 수수료 등의 다른 속성이 있으므로 실제로 가져야합니다. 그 얘기는하지 않겠다. 어쨌든 감사합니다! –

답변

16

이 시도 :

return context.Shops.Include(s => s.ShopFacilities.Select(f => f.Facility)) 
       .First(x => x.Id == id);  

하지만 당신은 @Kristof 코멘트에 무엇을 제안 따라야합니다.

+0

고마워, 그거야! –

+1

강력한 타입의'Include()'메소드는 확장 메소드이므로'using System.Data.Entity; '문을 반드시 기억해야합니다. – krzychu