2012-03-02 70 views
3

我無法找到簡單問題的答案:如何手動清除ObjectDataSource緩存 - 從我的C#代碼。在一些DevExpress組件中,將Visual Studio 2010中的ASP.NET與.NET v4結合使用。如何手動清除ObjectDataSource緩存

我:

<asp:ObjectDataSource ID="SomeId" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="SomeMethod" TypeName="SomeType" EnableCaching="True" CacheDuration="9999" CacheExpirationPolicy="Absolute"> </asp:ObjectDataSource>

我看過類似的問題:Where does the ObjectDataSource cache data?哪個環節:ObjectDataSource.EnableCaching Property。它表示緩存存儲在緩存對象(Page.Cache)中。

我發現的所有其他建議都會導致Cache對象。問題是:Cache對我來說是空的,而Cache.Remove(ObjectDataSourceID.CacheKeyDependency);什麼也沒做。

緩存機制即使在緩存爲空時也能正常工作。將EnableCaching更改爲false會禁用緩存,但將其設置爲true後,會使用緩存的舊值啓用緩存。

+1

'ObjectDataSource'使用專用的'SqlDataSourceCache'實例來存儲數據。這個私有成員只會被內部的'Cache'屬性暴露出來,所以除非你通過反射破壞封裝,否則你將無法訪問它。 – 2012-03-02 11:00:35

回答

3

得益於弗雷德裏克·哈米迪評論,我發現了以下主題: Clear cache in SqlDataSource

使用CacheKeyDependency = 「MyCacheDependency」,然後在代碼:

Cache["MyCacheDependency"] = DateTime.Now; -- invalidates cache. 
1

在的.aspx

<asp:ObjectDataSource ID="ODSData" runat="server" 
    EnableCaching="true" CacheKeyDependency="MyCacheKey" 

在c#

Cache.Remove(ODSData.CacheKeyDependency);