Как принудительно обновить возможно кэшированное значение? - PullRequest
0 голосов
/ 26 марта 2010

У меня есть следующий репозиторий:

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

Я делаю все выделения, используя LINQ на PageRepository.AllPages, а также добавляю новые сущности через коллекцию, используя Repository.AllPages.AddNew().

Когда я звоню Repository.AllPages.Save(), данные сохраняются в базе данных, однако личная общая переменная _pages сохраняется.

Должен ли я каким-либо образом принудительно обновлять эту переменную при каждом обновлении страницы? Или это должно быть сделано через Module / Static class и моя реализация неверна?

1 Ответ

1 голос
/ 26 марта 2010

Когда вы выполняете сохранение, вы лишаете законной силы кэш. В этот момент вы должны принудительно обновить или каким-либо образом истечь срок действия кэша для любых потребителей. Это зависит от того, как он используется и как вы проектировали свою архитектуру.

Вы уверены, что кэширование действительно необходимо? SQL Server (и другие БД) имеют хорошие функции кэширования, а LINQ dataContext для LINQ to SQL и Entity Framework имеют дополнительные функции, которые можно использовать. Короче, пробовали ли вы использовать

Public Class PageRepository

    Shared Function AllPages() As BLL.PageCollection
        Return new BLL.PageCollection(LOADALL)
    End Function

End Class

Если у вас есть и вам нужно кэширование, можете ли вы передать кэширование в BLL?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...