2012-03-02 35 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);