Search code examples
.netvb.netsilverlightsilverlight-4.0wcf-ria-services

Silverlight RIA hierarchical model not returning child elements


I ham developing a Silverlight RIA solution that needs to return a hierarchical model from the server which is declared as below.

Imports System.ComponentModel.DataAnnotations
Imports System.Collections.Generic
Imports System.Runtime.Serialization

<DataContract()>
Public Class Concerns

    <Key()>
    <DataMember()>
    Property ID As Integer
    <DataMember()>
    Property ParentID As Integer
    <DataMember()>
    Property IssueID As String
    <DataMember()>
    Property Version As Integer
    <DataMember()>
    Property ShortDescription As String
    <DataMember()>
    Property DetailedDescription As String
    <DataMember()>
    Property OriginatingDepartment As String
    <DataMember()>
    Property OriginatingBusinessUnit As String
    <DataMember()>
    Property BusinessUnitAffected As String
    <DataMember()>
    Property ProjectModel As String
    <DataMember()>
    Property Category As String
    <DataMember()>
    Property Priority As Integer
    <DataMember()>
    Property ApprovalStatus As Integer
    <DataMember()>
    Property ProductLifeCycle As String
    <DataMember()>
    Property ListItemID As Integer
    <DataMember()>
    Property CreateDate As Date
    <DataMember()>
    Property CreateBy As String
    <DataMember()>
    Property EditedDate As Date
    <DataMember()>
    Property EditedBy As String
    <DataMember()>
    <Association("Concerns", "ID", "ParentID")>
    Property History As New List(Of Concerns)

End Class

The issue I have is that although the History property is populated server side when returned to the Silverlight client as a ReadOnlyObservableCollection the History property does not come over.

I have tried flagging the class with the <CollectionDataContract()> annotation but nothing returns.

EDIT: Following Jehof post the History property now returns across the service but the data populated in the History collection does not appear client side.

Any idea what I am missing?

Phil


Solution

  • You need to define a Association between Concerns and and its containing Concerns (Parent-Child-Structure). To do that you need to decorate the History property with the AssociationAttribute. Also you must add a property ParentId to your Concerns class that will be used in the Association.

    <DataContract()>
    Public Class Concerns
    
      <Key()>
      <DataMember()> _
      Property ID As Integer
    
      <DataMember()> _
      Property ParentID As Integer
    
      <DataMember()> _
      <Association("Concerns", "ID", "ParentID")>_
      <Include()> _
      Property History As New List(Of Concerns)
    
    End Class