Очистка триггера кеша при операции с таблицей в linq to sql - PullRequest
0 голосов
/ 13 июля 2010

У меня есть метод, который получает все записи из определенной базы данных, а затем сохраняет их в кеше.При следующем вызове этого метода он сначала проверяет кэш, чтобы узнать, может ли он просто вернуть версию кеша, если срок действия этого объекта кеша не истек.

Вопрос : как это сделатьЯ запускаю метод каждый раз, когда dataContext.SubmitChanges () вызывается?Например, если я получу все книги из таблицы Book и сохраню их в Cache [«AllBooks]], я хочу, чтобы этот объект кэша очищался при любых грубых операциях, связанных с таблицей Book.

Что я сейчас делаю :

var b = dataContext.Books.Where(x => x.BookId == 4).SingleOrDefault();
b.Title = "new title for book w/ id of 4";
dataContext.SubmitChanges();
ClearBookCache();

позже ...

private void ClearBookCache() {
    CustomCachingSystem.Clear["AllBooks"];
}

Что я хочу : ClearBookCache () будет автоматическисрабатывает на любых операциях с использованием таблицы таблиц crud, и мне приходится не забывать вызывать ее каждый раз, когда я выполняю операцию crud на таблице Book.

Примечание : я не хотел бы, чтобы ClearBookCache () метод, который будет вызван, если я сделаю грубую операцию с таблицей, не связанной с таблицей Book.

Надеюсь, это имеет смысл!

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Вы можете использовать SqlDependency Class . По сути, это позволит вам обнаружить изменения в запрашиваемых данных (если вы используете M $ SQL Server 2005 +).

Возможно, вы захотите изучить технологию Service Broker (если вы используете M $ SQL Server 2005 +).

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

0 голосов
/ 13 июля 2010

Взгляните на DataContext.GetChangeSet () - вы можете наследовать от DataContext и переопределить методы SubmitChanges, чтобы очистить соответствующие кэши на основе содержимого ChangeSet, а затем вызвать MyBase.SubmitChanges (...).

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