2014-12-11 3 views
0

asp.net 및 LINQ 쿼리를 처음 사용했습니다. 다음 쿼리를 작성했지만 오류가 발생했습니다. 위의 질문에LINQ 오류 포함

Include path expression must refer to a navigation property defined on the type

같은 오류가 있지만 전혀 일어나고 왜 설명하지 않습니다. 아래의 세 번째 줄에 인라인 .First() 메서드를 포함했기 때문에 그것이라고 믿지만 다시 왜 이것이 발생하고 그것이 무엇을 의미하는지 알고 싶습니다. 도와 줘서 고마워.

오류 :

The Include path expression must refer to a navigation property defined on the 
type. Use dotted paths for reference navigation properties and the Select 
operator for collection navigation properties. 
Parameter name: path 

검색어 :

IQueryable<User> users = db.Users 
    .Where(u => u.Email == email) 
    .Include(cu => cu.CompanyUsers.First()) 
    .Include(c => c.Companies) 
    .Include(p => p.ParentCompanyAccounts); 
+1

'사용자'정의를 표시 할 수 있습니까? –

+0

데이터 모델? – Ellery

+0

예, 데이터 모델입니다. –

답변

1

문제는 검색어의 세 번째 줄에 있습니다. Include 메서드를 사용하여 무언가를 포함 시키면 개체 하나만 가져갈 수 없습니다. 당신은 그들 모두를 가져 가야합니다.

그래서 당신은 여기서

.Include(cu => cu.CompanyUsers.First())

가되어야한다 Include을 사용하는 방법에서 좋은 모습을 위해

.Include(cu => cu.CompanyUsers);

, 나는 this MSDN post에서 살펴 보는 것이 좋습니다.

1

당신은 Include 호출 First을 사용할 수 없습니다. Include을 사용하려면 모두의 관련 값을 포함해야합니다.

+0

호출을 한 개로 제한하는 방법이 있습니까? 아니면 쿼리를 실행 한 후에해야합니까? – Ellery

+1

@ 엘레 리 '포함'을 사용하여 세트를 필터링 할 수있는 방법이 없습니다. – Servy

+0

@ 엘레 리'Include '를 사용하는 요점은 모든 것이 즉시 메모리에로드되기를 원한다는 것입니다. 그렇지 않으면, 당신은 다른 무언가를 찾고 있습니다. – IronMan84

0

사용자는 영구 속성과 함께 일시적인 속성을 사용할 수 있습니다.

class User 
{ 
    .... 
    public virtual ICollection<User> CompanyUsers {get; set;} //persistent property 

    [NotMapped] 
    public User FirstCompanyUser //transient property 
    { 
     get{ return CompanyUsers.FirstOrDefault(); } 
    } 
} 

데이터 우선 접근 방식을 사용하면 재생성시 코드 손실을 피하기 위해 부분 클래스를 사용할 수 있습니다.