2010-07-14 40 views
1

我想有在ASP.NET CacheObject,這好像是改變了一些相關的項目將被刪除CacheDependancy多個緩存項

所以一個項目。在請求

  1. 如果提示,它存在於緩存中刪除根對象,所有的依賴也將被刪除
  2. 檢查緩存中的根對象,如果它不存在,添加它
  3. 添加其他對象與高速緩存依賴於根對象

當我這樣做,我得到一個錯誤「An attempt was made to reference a CacheDependency object from more than one Cache entry

我看到,你可以做一個AggregateCacheDependency許多依賴應用到一個緩存項,但似乎你不能這樣做的其他方式。

有沒有人找到一種方法來做到這一點?

這裏是一些代碼,它不是我實際存儲,但它代表着相同的任務

public class HomeController : Controller 
{ 
    private const string ROOT_KEY = "ROOT"; 

    protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     if(Request.QueryString["clearcache"]!=null){ 
      // removed the root, hopefully removing all dependents 
      HttpContext.Cache.Remove(ROOT_KEY); 
     } 

     if (HttpContext.Cache[ROOT_KEY] == null) 
     { 
      // create the root entry 
      HttpContext.Cache[ROOT_KEY] = string.Empty; 
     } 

     if(HttpContext.Cache[Request.Url.AbsolutePath]==null){ 

      // add the url if not already added 
      HttpContext.Cache.Insert(
       Request.Url.AbsolutePath, string.Empty, 
       new CacheDependency(null, new []{ROOT_KEY})); 
     } 
    } 
} 
+0

你可以發佈一些示例代碼 – Adeel 2010-07-14 09:38:20

+1

您是否嘗試過使用自定義類(卸妝)引用其他緩存項目?通過dep從緩存中刪除Remover時,還可以刪除所有引用的緩存對象。 – 2010-07-14 10:09:41

回答

3

上面的代碼不工作,關鍵是每次創建一個新的CacheDependency。 在我試圖重複使用同一個對象的非僞代碼中,這導致了所描述的錯誤。

@Adeel &雅羅斯拉夫感謝您的答覆反正

0

多的無效於單個事件的問題是一些當前可用的緩存不與本地或有效地處理。作爲TagCache的作者,我邀請您嘗試一下,看看它在您的情況下是否是更好的選擇。