Caching business objects?

S

Showjumper

Hi
I have custom bustom objects whose properties i populate using a datareader.
Is it possible to cache the business object afteri have populated it? If so,
how? Everything i have tried does not work.

Ashok
 
S

sloan

When I know I need to cache these objects, I usually go ahead an put on the
[Serializable]
attribute.

This would affect you if you ever went to Session storing like sql server
session state.


You can also look at this fancy object I wrote, for a "strong typed" version
of storing items in Session.

http://sholliday.spaces.live.com/Blog/cns!A68482B9628A842A!151.entry


If you're on 1.1, go back to the main blog page, there is a 1.1 version of
it as well.
 
P

Paul

Here is what we use ( in a static class )
Be aware that Cache is global and NOT session based.

#region checkCache
/// <summary>
/// Will test for the requested value in the Session Cache.
/// </summary>
/// <typeparam name="T">Type of cached object</typeparam>
/// <param name="sKey">Key to search on</param>
/// <returns>T</returns>
public static T checkCache<T>(string sKey)
{
T returnValue = default(T);

if (HttpContext.Current != null)
{
object oValue = HttpContext.Current.Cache.Get(sKey);

if (oValue is T)
{
returnValue = (T)oValue;
}
}

return returnValue;
}
#endregion

#region cacheItem
/// <summary>
/// Cache items to the session chache for a set number of
minutes.
/// </summary>
/// <param name="sKey"></param>
/// <param name="oItem"></param>
/// <param name="cacheMinutes"></param>
public static void cacheItem(string sKey, object oItem, int
cacheMinutes)
{
if (HttpContext.Current != null && oItem != null)
{
Cache cache = HttpContext.Current.Cache;

object oExistingItem = cache.Get(sKey);

// If the item is already cached
if (oExistingItem != null)
{
cache.Remove(sKey);
}

cache.Add(sKey, oItem, null,
DateTime.Now.AddMinutes(cacheMinutes), Cache.NoSlidingExpiration,
CacheItemPriority.Normal, null);

}
}
#endregion

#region expireCacheItem
/// <summary>
/// Removes an item from the Cache.
/// </summary>
/// <param name="sKey"></param>
public static void expireCacheItem(string sKey)
{
if (HttpContext.Current != null)
{
HttpContext.Current.Cache.Remove(sKey);
}
}
#endregion
 
P

Paul

An example of calling that code using the Session ID to make is
session specific in this case.

string sCacheKey = "CMSContext{0}{1}";
sCacheKey = string.Format(sCacheKey,
loggedOnUser.GUID, Session.SessionID);

CMSContext currentContext =
util.checkCache<CMSContext>(sCacheKey);

if (currentContext == null)
{
currentContext = new CMSContext(Session,
loggedOnUser);
}

// Unlike most cache Items we refresh the Cache of
this Item every time it is accessed
util.cacheItem(sCacheKey, currentContext, 20);
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top