设置密钥依赖项时,ASP缓存不会添加项目

时间:2013-12-28 11:04:52

标签: c# asp.net .net caching

我正在围绕System.Web.Caching.Cache编写一个包装器。添加方法:

public void Add(string key, object data, IEnumerable<string> dependency)
{
        var toInsert = dependency.Where(i => i != null && key != i).ToArray();
        Cache.Add(key
            , data
            ,   toInsert.Any() 
                ? new System.Web.Caching.CacheDependency(null, toInsert) 
                : null
            , System.Web.Caching.Cache.NoAbsoluteExpiration
            , TimeSpan.FromHours(1)
            , System.Web.Caching.CacheItemPriority.Normal, null);

        System.Diagnostics.Debug.WriteLine(Cache[key]);
}

问题是当CacheDependency不为null时,item不会添加到缓存中。

但这种方法有效:

public void Add(string key, object data, IEnumerable<string> dependency)
{
    var toInsert = dependency.Where(i => i != null && key != i).ToArray();
    Cache.
    Cache.Add(key
        , data
        , null
        , System.Web.Caching.Cache.NoAbsoluteExpiration
        , TimeSpan.FromHours(1)
        , System.Web.Caching.CacheItemPriority.Normal, null);

    System.Diagnostics.Debug.WriteLine(Cache[key]);
}

添加项目并打印到输出。

2 个答案:

答案 0 :(得分:0)

构建CacheDependency的方式看起来有点奇怪。您已将路径数组设置为null。参考here

您可以尝试更改此

new System.Web.Caching.CacheDependency(null, toInsert)

new System.Web.Caching.CacheDependency(new [], toInsert)

答案 1 :(得分:0)

如果在插入时刻缓存中至少有一个依赖关键字存在,则不会将项添加到缓存中。