我有一个包含我的实体的extenal类库。在Silverlight托管项目中,我有一个域服务类,将这些内容暴露给silverlight应用程序。当我使用include方法查询实体时,它会在服务器上加载相关实体,但它们不会传递给客户端。这是实体 - 我在stackoverflow上搜索解决方案之后最终添加了一个元数据类,但这并没有改变任何东西:
[MetadataTypeAttribute(typeof(ProjectManager.ProjectManagerMetadata))]
public partial class ProjectManager
{
public ProjectManager()
{
this.Jobs = new HashSet<Job>();
}
[Key]
public int ProjectManagerKey { get; set; }
public string TenantID { get; set; }
public string Name { get; set; }
public string UserID { get; set; }
public string PIN { get; set; }
public ICollection<Job> Jobs { get; set; }
internal sealed class ProjectManagerMetadata
{
private ProjectManagerMetadata()
{
}
[Include]
[Association("ProjectManagerJob", "ProjectManagerKey", "JobKey")]
public ICollection<Job> Jobs { get; set; }
}
}
这是查询 - 我试过“ToList()”认为它可能会有所帮助。它没有
public IQueryable<ProjectManager> GetProjectManagers()
{
List<ProjectManager> proj = (from p in trs.ProjectManagers.Include("Jobs") where p.TenantID == tenantID select p).ToList();
return proj.AsQueryable();
}
在服务器端的调试器中,加载了一个ProjectManager和他的七个相关作业,但是在silverlight应用程序中(在调试器中)没有相关的作业。我错过了什么?
编辑:这是客户端代码:
public void InitialDataLoad()
{
busyHelper.Busy("Loading...");
trx.Load(trx.GetProjectManagersQuery(), this.InitialLoadCompleted, null);
}
private void InitialLoadCompleted(LoadOperation loadOp)
{
busyHelper.BusyDone();
if (!loadOp.HasError)
{
foreach (ProjectManager manager in trx.ProjectManagers)
{
foreach (Job job in manager.Jobs)
{
// no jobs returned
}
}
}
else
{
ErrorWindow.CreateNew(loadOp.Error);
loadOp.MarkErrorAsHandled();
}
}
更新
事实证明,正在填充datacontext的作业实体集(代码中的trx),但个别项目管理者的jobs属性不是。换句话说:
trx.ProjectManagers.Count = 4
trx.Jobs.Count = 9
trx.ProjectManagers[2].Jobs.Count = 0 //(Should be 9)
trx.Jobs[0].ProjectManagers.Count = 0 //(Should be 1)