1

我有一个使用 mvvm 和 ria 服务的 Silverlight 应用程序。我在用户输入作业编号并单击查找的视图上有一个文本框。此查找按钮使用 xaml 中的 ICommand 转到此处..

public ICommand FindJob
{
    get
    {
        return new DelegateCommand(BeginFindJob, (o) => true);
    }
}

public void BeginFindJob(object o)
{
    if (!IsDesignTime)
    {
        IsLoading = true;
        string jobnum = o.ToString();
        OnPropertyChanged("IsLoading");
        LoadOperation<Job> loadOp = _context.Load<Job>(_context.GetJobsByJobNumQuery(jobnum));
        loadOp.Completed += new EventHandler(loadOp_Completed);
    }
}

它像这样在我的 ria 服务中使用 GetJobsByJobNumQuery。

public IQueryable<Job> GetJobsByJobNum(string JobNum)
{
    var query = ((from j in this.ObjectContext.Jobs
                  where j.JobNumber == JobNum
                  select j) as ObjectQuery<Job>).Include("JobHeadings").Include("JobContracts").Include("JobTags").Include("JobMarket"); 
    return query;
}

我希望它返回有关工作的所有信息,所以我编写了上面的查询以包含所有这些关系。在 linq 查询上放置一个断点并查看结果,它完全符合我的要求。所有字段、JobHeadings 和 Contracts 都在工作,并将所有绑定带回该作业。所以现在我将该查询带回我的视图模型并填充字段,就像这样..

void loadOp_Completed(object sender, EventArgs e)
{
    try
    {
        LoadOperation<Job> loadOp = sender as LoadOperation<Job>;
        if (!loadOp.HasError)
        {
            _job = loadOp.Entities.FirstOrDefault<Job>();

            base.IsLoading = false;
            base.ProgressBarVisibility = Visibility.Collapsed;
            base.OnPropertyChanged("IsLoading");
            base.OnPropertyChanged("ProgressBarVisibility");
            base.OnPropertyChanged("CurrentJob");
        }
    }
    catch (Exception ex)
    {
    }
}

我的问题是,没有关系数据返回。所有基本作业信息都从我的数据库中的作业表返回,但相关表中的任何信息都没有返回到我的视图模型中。将 bp 放入并查看应该包含所有内容的 _job,所有关系表 JobHeading/JobContract 都显示“枚举未产生任何结果”。

那么它是如何不回到视图模型的呢?我该怎么做才能将完整的查询结果放入视图/视图模型中,以便进行更改?

4

2 回答 2

1

包含在 ObjectSet 上不应该更高吗?像这样:

public IQueryable<Job> GetJobsByJobNum(string JobNum)
    {
        var query = ((from j in this.ObjectContext.Jobs.Include("JobHeadings").Include("JobContracts").Include("JobTags").Include("JobMarket")
                      where j.JobNumber == JobNum
                      select j) as ObjectQuery<Job>); 
        return query;
    }
于 2012-09-07T17:43:46.440 回答
0

这是元数据服务没有获取我最新的表关联的问题。在我经历了重新生成元数据的混乱之后,包含和关联正确的键是一件简单的事情。感谢昆顿伯恩哈特的努力!

于 2012-09-07T21:04:53.280 回答