0

我有一个包含我的实体的外部类库。在 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)
4

0 回答 0