我有一個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