2012-12-20 3 views
5

RIA 서비스를 사용하는 Silverlight 5 Business Application을 사용하여 서비스 측면에서 POCO 클래스를 반환하여 계층 적 메뉴를 채 웁니다.Silverlight POCO가 RIA 서비스에서 반환했습니다.

원래 POCO 클래스와 관련된 문제는 서비스 측면에서 채워졌지만 SubMenuItems 속성이 RIA 서비스를 통해 전달되지 않는다는 것입니다.

원래 POCO

public class BusinessModelMenuDto 
{ 
    [Key] 
    [Required] 
    public int ID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; } 
} 

나는 [Include][Association] 속성을 통해 데이터를 전달하기 위해 SubMenuItems에 필수 였을 발견 된 일부 추가 조사에 따라 서비스 호출

public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy() 

. ID => ID 협회에서 처음으로이 작업을 수행 한 결과 원하는 결과가 없었으므로 ParentID 속성을 추가하고 아래 코드와 같이 외부 키를 채우도록 내로드 코드를 변경했습니다. 또한 Associate를 ID에서 Parent ID로 매핑하도록 변경했습니다.

는 최상위 항목이 하위 항목의 컬렉션을 포함하지만, 그 아래에 더 이상 하위 항목이 없기 때문에 나는 순간에 메뉴 두 가지 수준을로드하고 서버 측에서 POCO 클래스를

public class BusinessModelMenuDto 
{ 
    [Key] 
    [Required] 
    public int ID { get; set; } 
    public int? ParentID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    [Include] 
    [Association("SubItems", "ID", "ParentID")] 
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; } 
} 

업데이트되었습니다.

내가 가진 문제는 RIA 서비스가 유선을 통해 컬렉션을 전송할 때 계층 구조가 뒤죽박죽이되고 있다는 것입니다. 반환 된 내용이 올바르게 구조화되어 있지만 클라이언트 측에 올바르게 도착하지 않았 음을 확인했습니다. 최상위 수준은 정상이지만 두 번째 수준 (SubMenuItems)이 혼합되어 두 개의 더 진한 SubMenuItems 수준이 나타납니다.

내가 뭘 잘못하고 있는지 알기! 문제는 Association 또는 여러 POCO 개체 (BusinessModelMenuDto)가 여러 수준에 사용된다는 사실과 관련이 있다고 가정합니다.

+0

나는 우리의 코드를 통해 빠른 모습을 가지고 있습니다. 나는 전문가는 아니지만 비슷한 구조를 가진 곳이라면 IEnumerable <>이 아닌 List <>를 사용하고 있습니다. – GarethOwen

+1

기본 객체는 List 이었지만 IList 으로 Property를 변경하려고했지만 여전히 작동하지 않습니다. . –

+0

DomainService의 쿼리 메서드를 게시 할 수 있습니까? – Jehof

답변

2

우리는 아이템 Key에 대해 Guids를 사용하고 클라이언트에 다시 전달하기 전에 서버에서 고유 한 값을 할당해야한다는 것을 알았습니다.

그래서 클래스 정의가 될 것입니다 :

public class BusinessModelMenuDto 
{ 
    [Key] 
    [Required] 
    public Guid ID { get; set; } 
    public Guid? ParentID { get; set; } 
    public string TextToDisplay { get; set; } 
    public string ImageSource { get; set; } 
    [Include] 
    [Association("SubItems", "ID", "ParentID")] 
    public IEnumerable<BusinessModelMenuDto> SubMenuItems { get; set; } 
} 

을 다음 새 요소가 ID 설정 만들 때 :

ID = Guid.NewGuid();