我有一个包含我的实体的外部类库。在 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();
}
}
更新
事实证明,数据上下文的作业实体集(代码中的 trx)正在填充,但各个项目经理的作业属性没有。换句话说:
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)