2009-10-22 4 views
1

내 EF 모델이 SQL Server 데이터베이스에서 생성되었습니다. 그런 다음 EF 모델에 대해 RIAServices 용 DomainService를 생성했습니다. 엔티티 중 하나는 "EntryCategories"라고합니다. 내 사용자 인터페이스 디스플레이 모델은 실제 모델에서 상당히 다른 모습 때문에RIAServices가 손으로 작성한 DomainService에서 지원되지 않는 유형

public IQueryable<EntryCategories> GetEntryCategoriesSet() 
{ 
    return this.Context.EntryCategoriesSet; 
} 

, 나는 그와 관련 기관에 대한 내 자신의 DomainService을 쓰기로했다 다음 DomainService이 방법을 만들었습니다. 그렇습니다, 우리는 생성 된 것을 수정하기위한 것이라는 것을 알고 있습니다.하지만 거기에는 많은 것들이 있습니다. 그리고 나는 작은 것에 집중하려고했습니다.

내가 생성 된 DomainService를 생성 DomainService에서 EnableClientAccess 속성을 제거하고 ClientDomainService라는 새로운 클래스를 추가하고, 캡슐화 : 나는 시도

[EnableClientAccess()] 
public class ClientDomainService : DomainService 
{ 
    // the generated domain service encapsulated in my new one. 
    private DataDomainService _dcds = new DataDomainService(); 

    // reimplement one of the DataDomainService methods 
    public IQueryable<EntryCategories> GetEntryCategories() 
    { 
     return (from t in _dcds.GetEntryCategoriesSet() where t.EntryCategoriesVersions.EntryCategoriesVersionId == datahead.EntryCategoriesVersions.EntryCategoriesVersionId orderby t.DisplayOrder select t); 
    } 
} 

매우 주먹 것은 GetCateogoriesSet 방법을 구현할 것입니다 내 클래스의 다른 엔티티 (미도시)를 기반으로 필터링 된 기본 데이터가 있습니다. 나는이를 만들 때 오류가 나타납니다 : 내 CientDomainService을 주석 경우

Entity 'DataProject.Web.EntryCategories' has a property 'EntryCategoriesVersionsReference' with an unsupported type 

, 생성 된 DomainService에 EnableClientAccess 속성을 교체하고, 원래 GetEntryCategoriesSet 방법에서 프로젝트를와 똑같이 LINQ 필터링을 배치 오류없이 컴파일합니다.

새로 생성 된 DomainService에는 어떤 특별한 기능이 있습니까? metadata.cs 파일입니까?

답변

0

도메인 서비스의 특정 엔터티를 노출하려면 적어도 하나의 쿼리 방법을 제공해야합니다. 엔티티가 다른 엔티티의 하위로만 액세스 될 때도 필요합니다.

시나리오를 올바로 작동 시키려면 도메인 서비스에 EntryCategoriesVersions 엔티티 세트를 추가해야합니다.

4

생성 된 도메인 서비스의 특별한 점은 .metadata.cs 파일이 아니기 때문에 (유지하고 사용할 수는 있지만 문제는 해결되지 않음).

RIA 서비스 (?)는 노출 된 Linq에서 EF 엔터티까지 '도메인 서비스 설명 공급자'가 필요하기 때문에 문제가 발생합니다. LinqToEntitiesDomainService 클래스에는 LinqToEntitiesDomainServiceDescriptionProviderAttribute가 이미 적용되어 있으므로 생성 된 도메인 서비스에서 상속받은 도메인 서비스도 공급자를 상속합니다.

DomainService에서 파생 된 자체 사용자 정의 도메인 서비스를 작성하고이를 통해 엔티티를 노출 할 때이 속성을 직접 적용해야합니다. 또한 공급자는 도메인 서비스 기본 클래스 (기본 클래스가 LinqToEntitiesDomainService 인 경우 수행 할 수 있음)에서 개체 컨텍스트 유형을 유추 할 수 없으므로 다음과 같이 특성 생성자에서 개체 컨텍스트 유형을 지정해야합니다.

[EnableClientAccess()] 
[LinqToEntitiesDomainServiceDescriptionProvider(
          typeof(YourObjectContextType))] 
public class ClientDomainService : DomainService 
{ 
    ... 
} 

해결해야합니다.

도메인 서비스에서 개체 컨텍스트를 추상화하려는 경우 실망하게됩니다. 필자는 개체 컨텍스트에서 작동하는 모든 코드가 도메인 서비스에서 사용되는 공급자로 들어가는 인기있는 저장소 모델을 선택했습니다. 이렇게하면 단위 테스트가 수월하지만 도메인 서비스의 개체 컨텍스트에 대한 종속성은 제거되지 않습니다.컨텍스트는 RIA 서비스가 귀하의 entite 또는 적어도 귀하의 경우 EntryCategoriesVersions와 같은 도메인 엔티티가 참조하는 것들을 이해하는 데 필요합니다.

+0

Tor Haugen의 답이 저에게 효과적이었습니다. 나는 그의 대답을 회상 할 수있는 충분한 담당자가 아직 없다. 필자는 다른 프로젝트에서 재사용 할 수있는 RIA 서비스 도메인 컨텍스트의 기본 클래스를 만들었으며 실제로 엔티티를 정의하는 클래스는 [LinqToEntitiesDomainServiceDescriptionProvider] 특성을 가지고 있습니다. 그러므로 objectcontext에 대한 하드 참조는 그 특정 objectcontext에서 엔티티를 직접 참조하기 때문에 큰 문제는 아닙니다 (나에게). 모든 도움에 감사드립니다! –

+0

이 문제가 발생할 수있는 방법에 대한 자세한 설명은이 스레드를 읽으십시오. http://forums.silverlight.net/p/233457/583536.aspx –

0

EntryCategoriesVersionsReference는 어떤 유형입니까? 유형에 대해 [DataContract] 주석을 추가하고 적절한 [Key] 및 [DataMember]를 추가하십시오. 마샬링에 도움이 될 것입니다.

관련 문제