我有問題再次調用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=1
,Age = 16
。
然後運行該應用程序,我以正確的方式獲取數據。
然後轉到數據庫,使用SQL更新數據以更改
Age = 20
。然後回到應用程序並點擊「刷新」按鈕來撥打新電話,但年齡並未更新至
20
,它仍然是16
。
我調試模式運行應用程序,並檢查數據:
在檢查點1,我檢查結果數據,它是好的,Age = 20
。
在檢查點2,我檢查數據在result.Entities
,數據沒有刷新,它仍然是Age = 16
。
我試過LoadBehavior.MergeIntoCurrent,LoadBehavior.RefreshCurrent
,但沒有成功。
所以我需要刷新SL應用主頁來重新加載整個SL應用,然後我可以看到新的數據。這是最終用戶不能接受的。
我不明白爲什麼。當點擊刷新按鈕時,我也嘗試使用提琴手來捕捉數據,數據確實得到最新的Age = 20
。
如何解決此問題?
要明確,當您在「this.RaisePropertyChanged(」Person「);」中設置斷點時,您會看到什麼? –
你可以調試你的服務器端代碼,看看返回的是什麼嗎?如果實體被緩存在服務器端的會話中,這可能是數據未更新的原因。此外,您不需要在客戶端重新設置個人資產,只需運行查詢,RIA服務將提高當前用戶的年齡屬性更改事件。 – Tevin
我想你應該在服務器端添加submitchanges() –