Although it isn't free, I'd recommend looking at the Entity Framework.

For caching when utilizing entity framework, you should check out this article. And there is another SO thread that talks about caching too.