When you cache entities in a cache object like HttpRuntime.Cache, you've to take into account that relationships are maintained on both sides.
So say you store a Customer entity in the cache. If you then somewhere do:
myOrder.Customer = cachedCustomer;
it will add 'myOrder' to cachedCustomer.Orders as well. Which will keep myOrder in memory till cachedCustomer is removed from the cache.
To avoid this, look into hiding one side of the relationship, namely the PK side (the '1' side in the 1:n relationship) in the designer. This of course means you'll lose the collection on the '1' side, but at the same time you don't run the risk that objects are kept in memory.
It's also good practice to cache objects only for a short period of time, unless all objects in the cache are more or less static.