我正在使用使用 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]
and[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; }
}
在服务器端,我目前正在加载两级菜单,因此顶级项目包含一组子项,但在此之下没有其他子项。
我遇到的问题是,当 RIA 服务通过网络发送集合时,层次结构变得混乱。我已确认我返回的内容结构正确,但未正确到达客户端。顶层还可以,但第二层(SubMenuItems)混在一起,出现了两个更进一步的 SubMenuItems 层。
知道我做错了什么吗?我认为问题出在关联上,或者是同一个 POCO 对象(BusinessModelMenuDto)被用于多个级别。