Pergunta

Eu gostaria de ter um item no ASP.NET CacheObject, que se fosse alterado um número de dependentes itens deveria ser removido

Então..Em um pedido de

  1. Se solicitado e existe no cache de remover o objeto raiz, toda a dependência será removido
  2. Verificação de raiz objeto no cache, se ele não existir, adicione-a
  3. Adicionar outros objetos para o cache com uma dependência em relação ao objeto raiz

Quando faço isso, eu recebo um erro "An attempt was made to reference a CacheDependency object from more than one Cache entry"

Eu sei que você pode fazer um AggregateCacheDependency para aplicar muitas dependências de um item em cache, mas parece que você não pode fazer da outra maneira ao redor.

Tem qualquer um encontrou uma maneira de fazer isso?

aqui está um código, não é o que eu sou, na verdade, armazenar, mas ele representa a mesma tarefa

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}));
        }
    }
}
Foi útil?

Solução

O código acima não funciona, a chave foi a criação de um novo CacheDependency cada vez.No não-pseudo-código que eu estava a tentar reutilizar o mesmo objeto, isto estava causando o erro descrito.

@Adeel & Jaroslav obrigado pelas respostas de qualquer maneira

Outras dicas

O problema de várias invalidations sobre um único evento é algo que o atualmente disponível caches de não lidar com nativamente ou de forma eficiente.Como o autor de TagCache, Eu convido você a experimentá-lo e ver se ele pode ser uma escolha melhor o seu cenário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top