CacheDependancy для нескольких кэшированных элементов

Я хотел бы иметь элемент в ASP.NET CacheObject, который, если бы он был изменен, был бы удален ряд зависимых элементов.

Итак .. В запросе

  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}));
        }
    }
}

person Anthony Johnston    schedule 14.07.2010    source источник
comment
Вы можете опубликовать образец кода   -  person Adeel    schedule 14.07.2010
comment
Вы пробовали использовать собственный класс (Remover) со ссылками на другие кешированные элементы? Когда Dep удаляет Remover из кеша, вы также можете удалить все упомянутые кэшированные объекты.   -  person Jaroslav Jandek    schedule 14.07.2010


Ответы (2)


Приведенный выше код действительно работает, ключ каждый раз создавал новую CacheDependency. В непсевдокоде я пытался повторно использовать тот же объект, это вызывало описанную ошибку.

@Adeel & Jaroslav все равно благодарит за ответы

person Anthony Johnston    schedule 14.07.2010

Проблема множественных аннулирований для одного события - это то, с чем доступные в настоящее время кеши не справляются изначально или эффективно. Как автор TagCache, я приглашаю вас попробовать его и посмотреть, может быть лучшим выбором в вашем сценарии.

person Shiva    schedule 24.09.2011