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)被用于多个级别的事实.
我们发现我们必须为该项目使用 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)
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |