2012-09-07 44 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