RIA服务返回Silverlight POCO

Phi*_*ray 5 .net c# 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; }
}
Run Code Online (Sandbox Code Playgroud)

服务电话

 public IEnumerable<BusinessModelMenuDto> GetCabsHeirarchy()
Run Code Online (Sandbox Code Playgroud)

经过一些进一步的调查后,我发现SubMenuItems需要[Include][Association]属性来传递数据.使用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; }
}
Run Code Online (Sandbox Code Playgroud)

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

我遇到的问题是,当RIA服务通过线路发送集合时,层次结构混乱.我已经确认我返回的内容结构正确但是没有正确到达客户端.顶级是可以的,但是第二级(SubMenuItems)混合在一起,并且出现了两个更进一步的SubMenuItems级别.

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

Chr*_*isF 2

我们发现我们必须为该项目使用 Guid Key,并在服务器上为其分配一个唯一的值,然后再传回客户端。

所以你的类定义将变成:

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; }
}
Run Code Online (Sandbox Code Playgroud)

然后当你创建一个新元素时设置ID:

ID = Guid.NewGuid();
Run Code Online (Sandbox Code Playgroud)