2012-01-22 3 views
6

My Entity Framework 모델이 SQL Server 데이터베이스에서 생성됩니다. Silverlight에서 데이터베이스에 액세스해야하므로 EF 모델에 대해 RIAServices 용 DomainService를 생성했습니다. Product은 테이블 Product에 해당하는 자동 생성 된 EntityObject 중 하나입니다. 표시된대로 사용자 지정 클래스 CompositeData을 Silverlight 클라이언트에 전달하려고합니다. 문제는 클라이언트에서 CurrentProduct 필드에 액세스 할 수 없지만 다른 문자열/int 필드에 액세스 할 수 있다는 것입니다. 클라이언트에서 CurrentProduct에 액세스하려면 어떻게해야합니까? 다음RIA 서비스를 통해 EntityObject 형식에 액세스 할 수 없습니다.

public class CompositeData 
{ 
    [Key] 
    public Guid PKey { get; set; } 
    public string CompositeName { get; set; } 
    public string Identity { get; set; } 
    public Product CurrentProduct { get; set; } //Product is an auto-generated EntityObject class 

    public CompositeData() 
    { 
     PKey = Guid.NewGuid(); 
    } 
} 

도메인 서비스 방법 : 실버 라이트 클라이언트에서

[EnableClientAccess()] 
public class LocalDomainService : DomainService 
{ 
    public IEnumerable<CompositeData> GetData() 
    { 
     List<CompositeData> listData = new List<CompositeData>(); 
     //... 
     return listData; 
    } 
} 

,

domService.Load(domService.GetDataQuery(), GetDataCompleted, null); 

    private void GetDataCompleted(LoadOperation<CompositeData> compData) 
    { 
     foreach(CompositeData cdItem in compData.Entities) 
     { 
      // cdItem.CompositeName is accessible 
      // cdItem.CurrentProduct is not accessible! 
     }      
    } 

편집 : Product 클래스가 Model1.Designer.cs

에 자동 생성됩니다
[EdmEntityTypeAttribute(NamespaceName="MyDBModel", Name="Product")] 
    [Serializable()] 
    [DataContractAttribute(IsReference=true)] 
    public partial class Product : EntityObject 
    { 
     //.. 
    } 

그것은

/// <summary> 
    /// The 'Product' entity class. 
    /// </summary> 
    [DataContract(Namespace="http://schemas.datacontract.org/2004/07/SilverlightProject")] 
    public sealed partial class Product : Entity 
    { 
     //.. 
    } 
+0

Silverlight 클라이언트가 Product 유형이 정의 된 어셈블리를 참조합니까? –

+0

편집 된 질문 – Nemo

답변

1

당신은 IncludeAssociation 속성을 사용 CompositeDataProduct 사이의 관계를 정의 할 수 있습니다. 그것은 ExternalReferenceAttribute 및 AssociationAttribute를 정의 할 수있다

[System.ServiceModel.DomainServices.Server.Include] 
[System.ComponentModel.DataAnnotations.Association("AssociationName", "MainKey", "AssociatedObjectKey")] 
public Product CurrentProduct { get; set; } 
0

(내 나쁜 영어 죄송합니다) (SilverlightProject.g.cs에서) 또한 클라이언트 프로젝트에서 생성됩니다

당신이되고 너무 DomainService 클래스에 Product 엔티티를 노출 할 필요가

실버 라이트 측면에서 볼 수 있습니다.

public IEnumerable<Product> GetProduct() 
{ 
    //... 
    return listProduct; 
} 
+0

를 참조하십시오. 어떻게 노출합니까? 도메인 서비스 클래스에서 이미 액세스 할 수 있습니다. – Nemo

+0

'Product' 타입이나'Iqueryable '또는'IEnumerable '을 반환하는 메소드를 넣는 것만으로 ('CompositeData' 클래스와 마찬가지로) -이 태그가 없으면, 정확히 무슨 일이 일어 났습니까? ...하지만 이미 있다면 거기에 무슨 일이 일어날 수 있을지 상상할 수 없다. – Leo

0

다음은 RIA Silverlight 프로젝트에 테이블을 빠르게 추가하는 방법입니다. 이 이미 기존 ADO.NET 엔터티 데이터 모델, DomainService.cs 및 DomainService.metadata.cs

  1. 난 내 데이터 모델을 업데이트 있다고 가정
  2. 가 새로운 도메인 서비스를 추가 구축 프로젝트 클래스와 이름은 가지고있는 것과는 다른 것입니다.
  3. 요청할 때 새 도메인 서비스에만 새 테이블을 추가하십시오. 이 은 새로운 domainservice.cs와 domainservice.metadata.cs를 새 테이블에 대한 정보와 함께 생성해야합니다.
  4. 새 도메인 서비스에서 자동 생성 된 코드를 복사하여 기존 도메인 서비스 에 넣고 방금 만든 도메인 서비스를 삭제하십시오.
  5. 메타 데이터에 대해 동일한 작업을 수행합니다.
  6. 프로젝트를 빌드 한 다음 완료하십시오.
0

은 CurrentProduct 속성을 통해 때문이다.

Include 속성을 ExternalReference 속성으로 바꿉니다.

관련 문제