2011-12-03 50 views
5

我有問題再次調用WCF RIA服務刷新客戶端數據。這裏是我的情況:如何使用wcf ria服務刷新客戶端實體的實例?

在服務器端,域名服務是一樣的東西:

public IQueryable<Person> GetPersonByID(int id) 
     { 
      var result = this.ObjectContext.Persons. 
       Where(e => e.PersonID == id); 
      return result; // check point 1 
     } 

在客戶端,我在以下幾個方法調用(這是一個按鈕,我稱之爲「刷新調用「按鈕):

this._amsService.Context.Load<Person>(
    this._amsService.Context.GetPersonByIDQuery(this.Person.ID), 
    LoadBehavior.RefreshCurrent, 
    result => 
    { 
     this.Person = result.Entities.FirstOrDefault(); //check point 2 
     this.RaisePropertyChanged("Person");  

    }, null); 

這裏是我嘗試:

假設我在DB的人與數據說personID=1Age = 16

  1. 然後運行該應用程序,我以正確的方式獲取數據。

  2. 然後轉到數據庫,使用SQL更新數據以更改Age = 20

  3. 然後回到應用程序並點擊「刷新」按鈕來撥打新電話,但年齡並未更新至20,它仍然是16

我調試模式運行應用程序,並檢查數據:

在檢查點1,我檢查結果數據,它是好的,Age = 20

在檢查點2,我檢查數據在result.Entities,數據沒有刷新,它仍然是Age = 16

我試過LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent,但沒有成功。

所以我需要刷新SL應用主頁來重新加載整個SL應用,然後我可以看到新的數據。這是最終用戶不能接受的。

我不明白爲什麼。當點擊刷新按鈕時,我也嘗試使用提琴手來捕捉數據,數據確實得到最新的Age = 20

如何解決此問題?

+0

要明確,當您在「this.RaisePropertyChanged(」Person「);」中設置斷點時,您會看到什麼? –

+0

你可以調試你的服務器端代碼,看看返回的是什麼嗎?如果實體被緩存在服務器端的會話中,這可能是數據未更新的原因。此外,您不需要在客戶端重新設置個人資產,只需運行查詢,RIA服務將提高當前用戶的年齡屬性更改事件。 – Tevin

+0

我想你應該在服務器端添加submitchanges() –

回答

0

首先,你是否處於編輯模式?如果您的實體處於編輯模式,RIA將保留您的更改,並且只在您再次加載實體時更新原始值。

您可以檢查您的Person實體的IsEditing屬性以找出。並嘗試檢查實體的OriginalValue。 var original = Person.GetOriginal()

相關問題