You can't say definitively whether caching is good or not. It really depends on what you are using it for. If you just dumped all of the records in a large table in it and then had to post process it after you retrieved it from the cache just to find a couple of records, then you shouldn't use the cache. If you are using it to hold static lookup data then it's a fine choice.
As I said in my first answer, as you control updates/inserts and deletes in your DAL, I would use that to decide whether or not the cache needs to be refreshed. Just spitballing here, but one way to do this would be to have a CacheManager class in which you listed all the tables that have been cached (this data is a perfect candidate for storing in a database and holding in a cache) - then to each of your inserts, etc, simply call a TriggerRefresh method on the CacheManager. Simplistically, all it would need to do is empty that particular cached entry and then let your application lazy load the data on the next hit.
*pre-emptive celebratory nipple tassle jiggle* - Sean Ewington