Asp.Net Cache, modify an object from cache and it changes the cached value?

The cache does just that, it caches whatever you put into it.

Up vote 2 down vote favorite share g+ share fb share tw.

I'm having an issue when using the Asp. Net Cache functionality. I add an object to the Cache then at another time I get that object from the Cache, modify one of it's properties then save the changes to the database.

But, the next time I get the object from Cache it contains the changed values. So, when I modify the object it modifies the version which is contained in cache even though I haven't updated it in the Cache specifically. Does anyone know how I can get an object from the Cache which doesn't reference the cached version?

I.e. Step 1: Item item = new Item(); item. Title = "Test"; Cache.

Insert("Test", item, null, DateTime.Now. AddHours(1), System.Web.Caching.Cache. NoSlidingExpiration); Step 2: Item item = (Item)Cache.

Get("test"); item. Title = "Test 1"; Step 3: Item item = (Item)Cache. Get("test"); if(item.

Title == "Test 1"){ Response. Write("Object has been changed in the Cache. "); } I realise that with the above example it would make sense that any changes to the item get reflected in cache but my situation is a bit more complicated and I definitely don't want this to happen.

Asp.net caching link|improve this question asked May 8 '10 at 5:48Glen132.

A complete code example would be helpful... – Ron Klein May 8 '10 at 6:23.

The cache does just that, it caches whatever you put into it. If you cache a reference type, retrieve the reference and modify it, of course the next time you retrieve the cached item it will reflect the modifications. If you wish to have an immutable cached item, use a struct.

Cache. Insert("class", new MyClass() { Title = "original" }, null, DateTime.Now. AddHours(1), System.Web.Caching.Cache.

NoSlidingExpiration); MyClass cachedClass = (MyClass)Cache. Get("class"); cachedClass. Title = "new"; MyClass cachedClass2 = (MyClass)Cache.

Get("class"); Debug. Assert(cachedClass2. Title == "new"); Cache.

Insert("struct", new MyStruct { Title = "original" }, null, DateTime.Now. AddHours(1), System.Web.Caching.Cache. NoSlidingExpiration); MyStruct cachedStruct = (MyStruct)Cache.

Get("struct"); cachedStruct. Title = "new"; MyStruct cachedStruct2 = (MyStruct)Cache. Get("struct"); Debug.

Assert(cachedStruct2. Title! = "new").

Thanks, I get it now! – Glen May 9 '10 at 23:09.

I cant really gove you an answer,but what I can give you is a way to a solution, that is you have to find the anglde that you relate to or peaks your interest. A good paper is one that people get drawn into because it reaches them ln some way.As for me WW11 to me, I think of the holocaust and the effect it had on the survivors, their families and those who stood by and did nothing until it was too late.

Related Questions