2012-09-07 23 views
1

我有一个Silverlight应用程序使用mvvm与ria服务。我有一个视图文本框,用户放入一个工作号码并点击查找。这一发现按钮在XAML去这里使用的ICommand ..Linq包含方法未显示在视图模型

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); 
    } 
} 

它使用GetJobsByJobNumQuery在像这样我的RIA服务..

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) 
    { 
    } 
} 

我的问题是,没有关系的数据回来。所有基本的Job信息都从我的数据库中的Job表中返回,但是没有任何来自相关表的信息会返回到我的viewmodel中。放入一个bp并查看应包含所有内容的_job,所有关系表JobHeading/JobContract都会说'枚举不会产生任何结果。

那么它怎么没有回到视图模型?我能做些什么来获得完整的查询结果放入视图/ viewmodel,以便我可以进行更改?

回答

0

这是元数据服务没有拿起我最新的表关联的问题。在经历了重新生成元数据的混乱之后,包含并关联正确的密钥是一件简单的事情。感谢Quinton Bernhardt的努力!

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; 
    } 
+0

我试过了,它在查询中双向工作,但都没有将结果返回给viewmodel – jcc

+0

您是否尝试过让ria服务执行往返数据库的往返行为,然后使用.AsEnumerable()或。 ToList()而不是ObjectSet?如果我正确理解代码,当视图调用FirstOrDefault()时,尝试往返Db的往返 - 也许ria服务应该这样做 –

+0

不,我没有尝试过,但是做了一些更多的研究,我发现我没有任何[在我的元数据服务中包含] [关联]。这可能是一个主要原因吗? – jcc