Question

nous avons des valeurs stockées dans la bibliothèque Cache-Enterprise Mise en cache bloc. Les accesseurs de l'élément mis en cache, ce qui est une liste, modifiez les valeurs. Nous ne voulions pas les éléments mis en cache à obtenir touchés.

Par conséquent, nous sommes retournés d'abord une nouvelle liste (IEnumerator du CachedItem) Cela a accesseurs sûr l'ajout et la suppression d'éléments avaient peu d'effet sur l'élément d'origine Cached.

Mais nous avons trouvé, toutes les instances de la liste nous sommes retournés à accesseurs étaient ALIVE! Objet Graphique relationnel a montré une relation entre cette liste et la EnterpriseLibrary.CacheItem.

Nous avons donc changé le retour à une liste cloné. Pour cela, nous avons utilisé un LINQ dire (À partir de données produit en sélectionner de nouveaux DataClass (point)) .ToList () même si vous le faites comme ci-dessus, l'ORG montre qu'il existe une relation entre cette liste et la CacheItem.

Cant nous faisons quoi que ce soit pour créer un CLONE de l'élément de liste qui est présent dans le cache de la bibliothèque Enterprise, qui ne marche pas avoir une relation avec CACHE?

Pas de solution correcte

Autres conseils

Vous devrez faire un clone profond de la liste, à savoir ajouter un clone de chaque objet dans la liste (et cloner des objets qu'ils peuvent contenir, je suggère d'avoir une méthode clone () pour le faire pour vous ), à une nouvelle liste. Comme il a été commenté ci-dessus, une référence est une référence, peu importe combien de fois vous le copier.

Voici comment nous cloner des éléments en les retirant du cache. Les objets doivent être marqués sérialisable.

        using (MemoryStream buffer = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, objectToClone);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top