Очистка кеша в XRM 2011 с помощью ObjectCacheManager - PullRequest
1 голос
/ 09 февраля 2012

В старые времена у меня было это http://arens.ws/wordpress/?p=54

public static void ClearCache(string entityName)
{
  const string format = "adxdependency:crm:entity:{0}";
  var dependency = string.Format(format, entityName).ToLower();

  var cache = Microsoft.Xrm.Client.Caching.CacheManager.GetBaseCache();
  cache.Remove(dependency);
}

В 2011 году все по-другому. Есть идеи?

1 Ответ

1 голос
/ 04 апреля 2012

Изменилось лишь немного:

ObjectCache cache = Microsoft.Xrm.Client.Caching.ObjectCacheManager
    .GetInstance("Xrm");
string cachekey = String.Format("xrm:dependency:entity:{0}:id={1:D}", 
    entity.LogicalName, entity.Id);
cache.Remove(cachekey);

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

[Update] Существует лучший способ .

Попробуйте это:

var serviceContext = (Get an OrganizationServiceContext);

var serviceContainer = serviceContext as 
                           OrganizationServiceContainer;
var cachedOrgService = serviceContainer.Service as 
                           CachedOrganizationService;
var orgServiceCache = cachedOrgService.Cache as 
                           IOrganizationServiceCache;
var entity = (Get the entity that was updated);

orgServiceCache.Remove(entity.LogicalName, entity.Id);

Работает как шарм ...

...