How to force a refresh of possibly cached value?
I have the following Repository:
Public Class PageRepository Private Shared _pages As BLL.PageCollection Shared Function AllPages() As BLL.PageCollection If _pages Is Nothing Then _pages = new BLL.PageCollection(LOADALL) Return _pages End Function End Class
I do all selects using LINQ on the PageRepository.AllPages, and I also Add new entities through the collection using Repository.AllPages.AddNew().
When I call Repository.AllPages.Save() the data is stored in the database, however the _pages private shared variable is maintained.
Should I somehow force a refresh of this variable everytime a page is updated? Or should this be done through a Module / Static class and is my implementation wrong?
When you're performing the save, you are invalidating the cache. You should force a refresh at that point or somehow expire the cache to any consumers. That depends how it's being consumed and how you designed your architecture.
Are you sure that caching is actually needed? SQL Server (and other DBs) have nice caching features and the LINQ dataContext for LINQ to SQL and Entity Framework have additional features that may be utilized. In short, have you tried using
Public Class PageRepository Shared Function AllPages() As BLL.PageCollection Return new BLL.PageCollection(LOADALL) End Function End Class
If you have and you do need the caching, can you push the caching to the BLL?