2012-04-27 54 views
0

使用Silverlight 4中,是Oracle 11g,和Entity Framework 4WCF數據服務和Silverlight:化DataServiceQuery <T>不會重新執行查詢

我用化DataServiceQuery填充數據網格。然後,一些本地(非EF)代碼更新數據庫。我想使用相同的查詢來刷新更新/新數據的DataGrid。問題是,當我這樣做時,它會返回舊的原始結果。我已驗證了變化,實際上已被事先致力於DB這段代碼運行:

DataServiceContext<T> dsContext= new DataServiceContext<T>(uri); 
dsContext.MergeOption = MergeOption.NoTracking; 
dsContext.SaveChangesDefaultOptions = SaveChangesOptions.ReplaceOnUpdate; 
DataServiceQuery<T> dsQuery = dsContext.CreateQuery<T>(typeof(T).Name); 
// oldQuery is an IQueryable<T> 
dsQuery = (DataServiceQuery<T>)oldQuery; 

var dsQuery = (DataServiceQuery<T>)oldQuery; 
dsQuery.BeginExecute(new AsyncCallback(c => 
    { 
     IEnumerable<T> result = dsQuery.EndExecute(c); 
     listSelectedRecord = new List<T>(); 
     listSelectedRecord = result.ToList(); 
    }), dsQuery); 

據我所知,新dsQuery甚至沒有被髮送到Oracle服務器,即使盡管正在創建新的DataServiceContext。它顯然發現它有一個緩存的副本。如果我在瀏覽器中輸入查詢,它會返回更新後的結果。

有關如何強制DS重新執行查詢的任何建議?

+0

相關鏈接:http://forums.asp.net/t/1363040.aspx/1我已經在使用MergeOption.NoTracking標誌,如上所示。 – jordanpg 2012-04-30 19:09:30

+0

我也注意到,如果我查看dsContext.Entities,則此DataServiceContext對象似乎根本不會跟蹤任何實體! Silverlight數據服務客戶端與.NET完整版本不同嗎? – jordanpg 2012-04-30 21:57:50

回答

0

令人震驚的答案,這個問題似乎在這裏找到:

Does Silverlight cache web service calls?

https://connect.microsoft.com/VisualStudio/feedback/details/340931/silverlight-webclient-does-not-download-updated-resources

人們似乎是某種模糊的共識,認爲SLX確實依賴在瀏覽器緩存,而不是你會知道從DataService,DataServiceContextDataServiceQuery文檔。

因此,最簡單的解決方法是在IE 8中關閉瀏覽器緩存。

0

oldQuery分配給新實例化的dsQuery對象顯然是從某處複製緩存的結果。我這裏使用的解決方案是更換

dsQuery = (DataServiceQuery<T>)oldQuery; 

dsQuery = (DataServiceQuery<T>)(dsQuery.Provider.CreateQuery<T>(oldQuery.Expression)); 

我還是想了解究竟在何處,爲什麼,以及如何將這些結果被緩存。該DataServiceQuery<T>文檔不說什麼了這一點:

http://msdn.microsoft.com/en-us/library/cc646574(v=vs.95).aspx

+0

其實,這似乎並沒有工作了...仍然接受建議。 – jordanpg 2012-05-03 16:50:30

+0

你有沒有像htmlcache或appfabric緩存中的任何緩存? – Nair 2012-05-06 19:57:38

+0

不,但可以肯定的是,我在DataService OnStartProcessingRequest中設置了SetNoServerCaching。我直接監視了WCF服務,正如我所說的那樣,我沒有看到任何證據表明請求甚至到達服務器,更不用說從中獲得緩存的結果。 – jordanpg 2012-05-06 21:38:51

0

你可以嘗試刪除你的文件名爲.suo如果調試時看到此行爲。