RIA服务返回Silverlight POCO

时间:2012-12-20 09:04:38

标签: c# .net silverlight wcf-ria-services silverlight-5.0

我正在使用使用RIA服务的Silverlight 5业务应用程序从服务端返回POCO类以填充分层菜单。

我对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; }
}

服务电话

 public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy()

经过进一步调查后,我发现SubMenuItems需要[Include][Association]属性来传递数据。第一次使用ID =&gt;的关联执行此操作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; }
}

在服务器端,我正在加载菜单的两个级别,因此顶级项目包含一个SubItems集合,但下面没有其他SubItems。

我遇到的问题是,当RIA服务通过线路发送集合时,层次结构混乱。我已经确认我返回的内容结构正确但是没有正确到达客户端。最高级别没问题,但第二级(SubMenuItems)已经混淆,并且出现了两个更为明确的SubMenuItems级别。

知道我做错了什么吗?我假设问题出在协会或者同一个POCO对象(BusinessModelMenuDto)被用于多个级别的事实。

1 个答案:

答案 0 :(得分: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();