我有一个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,以便我可以进行更改?
我试过了,它在查询中双向工作,但都没有将结果返回给viewmodel – jcc
您是否尝试过让ria服务执行往返数据库的往返行为,然后使用.AsEnumerable()或。 ToList()而不是ObjectSet?如果我正确理解代码,当视图调用FirstOrDefault()时,尝试往返Db的往返 - 也许ria服务应该这样做 –
不,我没有尝试过,但是做了一些更多的研究,我发现我没有任何[在我的元数据服务中包含] [关联]。这可能是一个主要原因吗? – jcc