Как очистить кэш DataContext на Linq к Sql

Я использую Linq для Sql для запросов некоторой базы данных, я только использую Linq для чтения данных с DB, и я вношу изменения в него другими средствами. (Это не может быть изменено, это - ограничение из Приложения, которое мы расширяем, все обновления должны пойти канавка его sdk).

Это прекрасно, но я поражаю некоторые проблемы кэша, в основном, я запрашиваю использование строки Linq, тогда я удаляю его канавка внешние средства, и затем я создаю новую строку внешне, если я запрашиваю ту строку снова с помощью linq, я получил старые (кэшируемые) данные.

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

Там какой-либо путь состоит в том, чтобы очистить кэш DataContex?

Я нашел метод sufring сетью, но это не кажется безопасным: http://blog.robustsoftware.co.uk/2008/11/clearing-cache-of-linq-to-sql.html

Что Вы думаете? каковы мои опции?.

13
задан albertein 20 January 2010 в 00:01
поделиться

2 ответа

Если вы хотите обновить определенный объект, то метод MOSTORESH () может быть Ваша лучшая ставка.

Мне нравится:

Context.Refresh(RefreshMode.OverwriteCurrentValues, objectToRefresh);

Вы также можете передавать массив объектов или IENumerable в качестве 2-го аргумента, если вам нужно обновить более одного объекта одновременно.

Обновление

Я вижу, о чем вы говорите в комментариях, в отражателе вы видите, что это происходит внутри .refresh ():

object objectByKey = context.Services.GetObjectByKey(trackedObject.Type, keyValues);
if (objectByKey == null)
{
    throw Error.RefreshOfDeletedObject();
}

Метод, который вы связали, кажется, ваш лучший вариант, класс DataContext не Предоставьте любой другой способ очистить удаленную строку. Проверки утилизации и таковые находятся внутри ClearCache () . Это действительно просто проверка на утилизацию и вызов RiseSservices () на CommondataServices Единственный плохой эффект будет очищать любые ожидающие вставки, обновления или удаления, которые вы в очереди.

Есть еще один вариант, вы можете выстрелить другой DataContext для любой операции, которую вы делаете? У него не будет никакого кэша ... Но это включает в себя некоторые вычислительные расходы, поэтому, если в ожидании вставки, обновления и удаления не являются проблемой, я бы придерживаюсь ClearCache () подход.

21
ответ дан 1 December 2019 в 22:23
поделиться

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

HTH.

0
ответ дан 1 December 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: