【问题标题】:Entity Framework and 2nd level caching with EF Provider WrappersEF Provider Wrappers 的实体框架和二级缓存
【发布时间】:2011-06-20 01:16:34
【问题描述】:

我正在尝试让二级缓存与实体框架 4 一起使用。Jarek Kowalski (http://code.msdn.microsoft.com/EFProviderWrappers/Release/ProjectReleases.aspx?ReleaseId=4747) 制作的“EF Provider Wrappers”效果很好,我遇到的问题是表中的所有缓存条目一旦对表进行更新,就会失效。这是有意为之,还是我在实施过程中犯了错误?

如果这是有意的,那么它在有很多更新的表上完全没用。有没有办法解决这个问题?

这是我实现的 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);
    }
}

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    是的,这是故意的。作者在您分享的同一个link 中提到了它。

    “EFCachingProvider 有点复杂。它使用外部缓存实现并缓存在 DbCommand.ExecuteReader() 中执行的所有查询查询的结果。每当检测到更新时(UPDATE、INSERT 或 DELETE ) 提供程序通过驱逐所有依赖于任何更新表的缓存查询来使受影响的缓存条目无效。"

    我不确定您的情况有什么干净的解决方案。但是,如果您的表经常更新,则最好不要缓存该表的条目。您可以使用“CustomCachingPolicy”将该表排除在缓存之外。

    “CustomCachingPolicy – 包括用户可配置的应该和不应缓存的表列表,以及过期时间和结果大小限制。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-13
      • 2018-10-29
      • 2012-12-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多