My experience is that the second level cache provided by ORM will cache data based on the actual set of results obtained from the database. This can lead to a lot of overhead because the object instance and data set are quite expensive.
The advantage is that lazy loading, etc. will work fine, but great results will still consume a lot of resources when refilling objects.
We use a combination of a second level cache and ASP.NET cache in our web application because of expensive overhead, which in rare cases saves up to several seconds (!), But with the inability of lazy collections to load or update objects.
This is based only on NHibernate, I have never worked with an entity infrastructure, but I assume that all ORM frameworks suffer from this.
jishi source share