Я использую Linq для Sql для запросов некоторой базы данных, я только использую Linq для чтения данных с DB, и я вношу изменения в него другими средствами. (Это не может быть изменено, это - ограничение из Приложения, которое мы расширяем, все обновления должны пойти канавка его sdk).
Это прекрасно, но я поражаю некоторые проблемы кэша, в основном, я запрашиваю использование строки Linq, тогда я удаляю его канавка внешние средства, и затем я создаю новую строку внешне, если я запрашиваю ту строку снова с помощью linq, я получил старые (кэшируемые) данные.
Я не могу выключить Отслеживание Объекта, потому что это, кажется, предотвращает контекст данных от связанных свойств автоматической загрузки (Внешние ключи).
Там какой-либо путь состоит в том, чтобы очистить кэш DataContex?
Я нашел метод sufring сетью, но это не кажется безопасным: http://blog.robustsoftware.co.uk/2008/11/clearing-cache-of-linq-to-sql.html
Что Вы думаете? каковы мои опции?.
Если вы хотите обновить определенный объект, то метод 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 ()
подход.
Вы должны быть в состоянии просто реквизировать наборы результатов, которые используя эти объекты. Это не потянуло бы кэшированный набор, но на самом деле будет вернуть окончательные результаты. Я знаю, что это может быть не так просто или осуществимо в зависимости от того, как вы настроили ваше приложение ...
HTH.