Существует несколько подходов к реализации кэширования, httpcontext - самый простой, но не обязательно худший. Взгляните на memcached или MS Velocity , оба из которых можно использовать в качестве бэкэнда для ASP.NET Cache. Особенно memcached имеет репутацию очень хорошей работы.
Что касается политики кэширования: вам нужно решить, что лучше для вас. Я лично удалил бы полный список из кэша при обновлении / удалении, а не пытался выяснить, есть ли объект в списке, так как он требует нетривиальное количество времени, и вам необходимо принимать во внимание проблемы параллелизма (блокировка списка, поскольку кто-то может обновить / удалить другую сущность).
Иногда имеет смысл обновить сущность на месте (если у вас есть полный объект со всеми необходимыми данными), иногда это пустая трата времени, потому что из-за какого-то изменения состояния сущность должна переместиться куда-то еще (например, когда вы сортируете по LastChangedDate и т. Д.)
Не забудьте также оптимизировать код вашей БД, чтобы обновление очищенного списка не занимало слишком много времени.