Effacer un élément du cache de prélecture dans la version 9.2

Aug 21 2020

Nous avons basé notre implémentation sur Effacer le cache Sitecore pour un élément du cache par programme afin d'effacer un élément du cache de prélecture comme ci-dessous

Cache prefetchCache = GetPrefetchCache(Database database);
prefetchCache.RemoveKeysContaining(itemID.ToString());

private Cache GetPrefetchCache(Database database)
    {
        foreach (var cache in global::Sitecore.Caching.CacheManager.GetAllCaches())
        {
            if (cache.Name.Contains(string.Format("Prefetch data({0})", database.Name)))
            {
                return cache;
            }
        }
    }  

Mais la classe Cache de 8.2 est modifiée en ICacheInfo dans 9.2 et RemoveKeysContaining n'est pas disponible. Existe-t-il un moyen de supprimer un élément particulier de prefetchCache dans 9.2

Réponses

1 HishaamNamooya Aug 21 2020 at 21:29

Sitecore a changé l'implémentation en ICacheInfo. Cependant, vous pouvez toujours utiliser la méthode RemoveKeysContainingsur le cache une fois que vous avez appliqué le casting Sitecore.Caching.Cache.

Le ICacheInfoa plusieurs implémentations et la classe Cacheest l'une des implémentations.

Veuillez consulter l'extrait de code ci-dessous:

Cache prefetchCache = GetPrefetchCache(database);

//Check for null before applying method
if (prefetchCache != null)
{
    prefetchCache.RemoveKeysContaining(itemID.ToString());
}

private Cache GetPrefetchCache(Database database)
{
    foreach (var cache in global::Sitecore.Caching.CacheManager.GetAllCaches())
    {
        if (cache.Name.Contains(string.Format("Prefetch data({0})", database.Name)))
        {
            return cache as Cache;
        }
    }
}  

Notez que le cache provient de l'espace Sitecore.Caching.Cachede noms de l'assemblySitecore.Kernel.dll