我想在ASP.NET CacheObject中有一个项目,如果它被更改,将删除一些依赖项目
所以......在请求中
当我这样做时,我收到错误“An attempt was made to reference a CacheDependency object from more than one Cache entry
”
我看到你可以使用AggregateCacheDependency将许多依赖项应用于一个缓存项,但是看起来你不能反过来这样做。
有没有人找到办法做到这一点?
这里有一些代码,它不是我实际存储的内容,但它代表了相同的任务
public class HomeController : Controller
{
private const string ROOT_KEY = "ROOT";
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
if(Request.QueryString["clearcache"]!=null){
// removed the root, hopefully removing all dependents
HttpContext.Cache.Remove(ROOT_KEY);
}
if (HttpContext.Cache[ROOT_KEY] == null)
{
// create the root entry
HttpContext.Cache[ROOT_KEY] = string.Empty;
}
if(HttpContext.Cache[Request.Url.AbsolutePath]==null){
// add the url if not already added
HttpContext.Cache.Insert(
Request.Url.AbsolutePath, string.Empty,
new CacheDependency(null, new []{ROOT_KEY}));
}
}
}
答案 0 :(得分:3)
上面的代码确实有效,关键是每次都创建一个新的CacheDependency 。 在非伪代码中,我试图重用同一个对象,这导致了所描述的错误。
@Adeel&无论如何,Jaroslav感谢你的回复
答案 1 :(得分:0)
单个事件发生多次失效的问题是当前可用的缓存无法原生或有效处理的问题。作为TagCache的作者,我邀请您试一试,看看它是否可能是您的方案中更好的选择。