2012-02-08 158 views
1

在过去,我有这个 http://arens.ws/wordpress/?p=54清除缓存,ObjectCacheManager

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

它改变了只有一点点:

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); 

我发现这个没有任何文档,通过枚举缓存中找到关键的命名方案。可能使用这不是最佳做法,它可能会在下一个版本中再次发生变化?应该有更好的办法做到这一点...

[更新] 有一个better way

试试这个:

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); 

就像一个魅力...