我是一个使用RIA服务返回一个POCO类来填充分层菜单的Silverlight 5商业应用程序。
我在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 => ID 关联并没有得到期望的结果,因此我添加了 ParentID 属性,并更改了我的加载代码来填充外键,如下所示。我还将关联从 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)用于多个级别的事实上。