Из другого вашего вопроса я читал, что вы используете 3-х уровневую архитектуру с уровнем dal, business и presentation.
Итак, я предполагаю, что у вас есть некоторый класс доступа к данным. Идеально было бы иметь кэшированную реализацию одного и того же класса и выполнять кеширование в этом.
Например: если у вас есть интерфейс IUserRepository, то класс UserRepository будет реализовывать его и добавлять / удалять / обновлять записи в БД с помощью методов, тогда вы также можете иметь CachedUserRepository, который будет содержать экземпляр объекта UserRepository, а в методах get он сначала просматривает кеш для некоторого ключа (полученного из параметров метода), и если элемент найден, он вернет его, в противном случае вы вызываете метод для внутреннего объекта; получить данные; добавить в кеш и вернуть его.
Ваш CachedUserRepository также будет иметь экземпляр объекта кеша, очевидно. Вы можете посмотреть http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.85).aspx, чтобы узнать, как использовать объект Cache.