2012-06-10 2 views
2

DomainService의 ID로 단일 엔터티를 검색하려고합니다.단일 엔터티를 검색 할 수 없습니다.

그러나 해당 엔티티 유형이 클라이언트에서 생성되지 않습니다.

public Contact GetContact(int contactId) 
{ 
    return DbContext.Contacts 
    .Include(c => c.Phones) 
    .Include(c => c.Addresses) 
    .SingleOrDefault(c => c.ContactId == contactId); 
} 

Phone 기업

클라이언트에서 생성되지 않습니다 여기 내 쿼리입니다.

나는 [Query]으로이 방법을 장식했지만, 나는 다음과 같은 컴파일 시간 예외가 얻을 :

쿼리 작업 'getContact 같은이'의 반환 형식 'Models.Contact'이후 작성 가능 표시 할 수 없습니다

구현하지 않습니다 IEnumerable of T.

ID로 단일 엔터티를 반환하는 WCF RIA 쿼리를 만드는 방법이 있습니까?

+0

전화 또는 주소에 대한 모델. 연락처에'[포함]'속성이 없습니다. –

+0

@Rikkos, 아뇨, 거기에 있습니다. 게다가 문제가되는 것은'IEnumerable '을 반환하지 않는다는 것인데, 클라이언트에서'Phone'과'Address' 엔티티가 생성 될 것이라고 믿고 해결했다고합니다. – Shimmy

+0

'[Query]'속성이 없으므로 컴파일되지만'DbContext'에'DbSet'으로 존재하더라도'Phone'과'Address' 엔티티가 생성되지 않습니다 –

답변

3

IsComposable 속성을 설정하면 빌드 할 수 있습니다. 그러나 우리 토론에서와 같이 나는 당신의 PhoneAddress 엔티티가 생성되지 않는 이유를 알지 못합니다. DomainDataSource하고있는 DataPager 같은

[Query(IsComposable=false)] 
public Contact GetContact(int contactId) 
{ 
    return DbContext.Contacts 
    .Include(c => c.Phones) 
    .Include(c => c.Addresses) 
    .SingleOrDefault(c => c.ContactId == contactId); 
} 
+0

'Phone'과'Address' 엔티티가 클라이언트에서 생성되지 않는 이유는 무엇입니까? 'Contact' 엔티티의'ICollection Phones' 속성은 ['Include']로 장식되어 있습니다 (http://msdn.microsoft.com/en-us/library/system.servicemodel.domainservices.server.includeattribute.aspx) 속성에도 동일하게 적용됩니다. – Shimmy

1

RIA 서비스 방법을 사용하려면 IQueryable<T> 또는 IEnumerable<T>이 필요합니다. 단일 요소가 아닌 변경 집합과 함께 작동합니다.

이로 변경을 (단일 개체를 반환하는 일을 그만) : (데이터는 물론로드되면)

public IQueryable<Contact> GetContact(int contactId) 
{ 
    return DbContext.Contacts 
    .Include(c => c.Phones) 
    .Include(c => c.Addresses) 
    .Where(c => c.ContactId == contactId); 
} 

단순히 클라이언트 측 코드에 FirstOrDefault()를 적용합니다.

+0

단일 엔터티를 반환하는 방법이 없다고 확신합니까? [Rikkos와 내 토론] (http://stackoverflow.com/questions/10966778/unable-to-retrieve-single-entitycomments14335634_10966778) 누가 단일 실체를 폭로하는 방법이 있다는 것을 밝혀 냈습니다. 문제는 노출되지 않은 포함 된 개체로 남아 있습니다. – Shimmy

+0

@Shimmy : 내가 발견 한 모든 예는 컴파일러를 속일 수있는 방법을 찾더라도 테이블이 아닌 단일 객체를 반환하는 데 필요한 WCF 코드를 생성하기위한 적합한 클라이언트 측 코드 템플릿이 없음을 나타냅니다. Silverlight 5에서 새로운 기능을 추가하지 않는 한 Entity Framework (즉, 모든 집합 기반)를 사용하는 것과 같습니다. –

+0

확인. 콜렉션을 반환하려고했지만'Phone'과'Address' 엔티티는 생성되지 않습니다. Phone 쿼리가 없기 때문입니까? 모든 휴대 전화를 노출하고 싶지 않은 경우 연락처/고객별로 만 돌려주고 싶습니다. – Shimmy

0

RIA 기반 컨트롤은 생성 거의 모든 단일로드 작업 (무슨 뜻인지 확인하려면 피들러 추적을 확인)와 LINQ '테이크()'를 사용. 나는 그 시간의 100 %를 말할만큼 충분히 오랫동안 보지 못했지만 그 대부분은 보았다. 이러한 컨트롤은 IQueryable을 기대하며 정렬, 페이지 매김, 그룹화 등과 같은 작업을 시도 할 때 무작위로 barf를 수행합니다. 실제로 .FirstOrDefault()를 호출하는 것은 그리 큰 문제가 아닙니다.