Domanda

stiamo avendo valori memorizzati nella libreria di Cache-Enterprise Caching Block. Le funzioni di accesso della voce nella cache, che è una lista, modificare i valori. Non volevamo gli elementi memorizzati nella cache per ottenere colpiti.

Quindi prima siamo tornati un nuovo elenco (IEnumerator del CachedItem) Ciò ha reso sicuro di accesso l'aggiunta e la rimozione di elementi hanno avuto poco effetto sulla voce cache originale.

Ma abbiamo trovato, tutte le istanze della Lista siamo tornati a funzioni di accesso fosse vivo! Oggetto grafico relazionale ha mostrato una relazione tra questo elenco e l'EnterpriseLibrary.CacheItem.

Così abbiamo cambiato il ritorno ad essere un elenco di recente clonato. Per questo abbiamo utilizzato un LINQ dire (Dalla voce in dati selezionare nuove classe di dati (voce)) ToList () anche quando lo fai come sopra, l'ORG mostra che v'è una relazione tra questo elenco e il CacheItem.

Cant abbiamo fatto nulla per creare un clone della voce di elenco che è presente nella cache biblioteca Enterprise, che doesnt hanno alcun rapporto con CACHE?!

Nessuna soluzione corretta

Altri suggerimenti

Si dovrebbe fare una profonda clone della lista, cioè, aggiungere un clone di ogni oggetto nella lista (e clonare tutti gli oggetti che possano contenere, vi suggerisco di avere un metodo Clone () per fare questo per voi ), per un nuovo elenco. Come è stato commentato in precedenza, un punto di riferimento è un riferimento non importa quante volte lo si copia.

Questo è il modo cloniamo elementi quando li tira fuori dal nascondiglio. Gli oggetti devono essere contrassegnati serializzabile.

        using (MemoryStream buffer = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, objectToClone);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top