Frage

sind wir in Cache-Enterprise Library Caching-Block gespeicherten Werte. Die Accessoren der im Cache gespeicherten Artikel, die eine Liste ist, ändern Sie die Werte. Wir haben nicht wollen, dass die Cache-Objekte betroffen werden.

Daher zunächst zurück wir eine neue Liste (IEnumerator des CachedItem) Dies sorgte dafür, dass Accessoren Hinzufügen und Entfernen von Artikel hatte nur geringe Auswirkungen auf den ursprünglichen Cached Artikel.

Aber wir fanden, werden alle Instanzen der Liste wir Accessoren zurückgekehrt waren ALIVE! Object Relational Graph zeigt eine Beziehung zwischen dieser Liste und der EnterpriseLibrary.CacheItem.

So haben wir die Rückkehr eine neu geklonte Liste zu sein. Dazu haben wir eine LINQ sagen (Von Punkt in Daten wählen neue Dataclass (Artikel)) .ToList () auch wenn Sie die ORG-Shows zu tun, wie oben, gibt es eine Beziehung zwischen dieser Liste und der CacheItem.

Cant wir alles tun, um einen Klon des Listeneintrags zu erstellen, die in dem Enterprise-Library-Cache vorhanden ist, die DOESNT jede Beziehung mit CACHE haben?!

Keine korrekte Lösung

Andere Tipps

würden Sie haben einen tiefen Klon der Liste zu machen, das heißt, fügen Sie einen Klon von jedem Objekt in der Liste (und alle Objekte klonen, dass sie enthalten kann, würde ich vorschlagen, ein Klon () Methode, die dies für Sie zu tun ), auf eine neue Liste. Wie kommentiert oben ein Bezugs eine Referenz ist, egal, wie oft Sie es kopieren.

Dies ist, wie wir Objekte klonen, wenn sie aus dem Cache zu ziehen. Die Objekte sind markiert serializable werden.

        using (MemoryStream buffer = new MemoryStream())
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(buffer, objectToClone);
            buffer.Position = 0;
            object temp = formatter.Deserialize(buffer);
            return temp;
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top