Я пытаюсь заставить кеширование 2-го уровня работать с платформой сущностей 4. «Оболочки провайдеров EF», сделанные Яреком Ковальским (http://code.msdn.microsoft.com/EFProviderWrappers/Release/ProjectReleases.aspx?ReleaseId=4747), работают довольно хорошо, проблема в том, что все кэшированные записи таблица становится недействительной, как только в нее вносится обновление. Это предназначено, или я допустил ошибку в моей реализации?
Если это предусмотрено, это делает его абсолютно бесполезным для таблиц, которые имеют много обновлений. Есть ли способ исправить это?
Это моя реализация интерфейса ICache, использующая ScaleOut StateServer в качестве кеша:
public class SossCache : ICache
{
private readonly NamedCache SossCache;
public SossCache(string cacheName)
{
this.SossCache = CacheFactory.GetCache(cacheName);
}
public bool GetItem(string key, out object value)
{
value = this.SossCache.Get(key);
return value != null;
}
public void PutItem(string key, object value, IEnumerable<string> dependentEntitySets, TimeSpan slidingExpiration, DateTime absoluteExpiration)
{
bool isAbsoluteTimeout = slidingExpiration == TimeSpan.Zero;
TimeSpan timeout = isAbsoluteTimeout ? absoluteExpiration.Subtract(DateTime.Now) : slidingExpiration;
CreatePolicy createPolicy = new CreatePolicy(timeout, isAbsoluteTimeout, ObjectPreemptionPriority.Normal, dependentEntitySets.ToArray(), true);
this.SossCache.Insert(key, value, createPolicy, true, false);
}
public void InvalidateItem(string key)
{
this.SossCache.Remove(key);
}
public void InvalidateSets(IEnumerable<string> entitySets)
{
foreach (string key in entitySets)
InvalidateItem(key);
}
}