0

我很困惑。

我正在使用这个开源代码片段。我在 SQL Server 中有一个没有任何触发器的表,但 SQLCacheDependency 工作正常。我以为你需要桌子上的触发器才能让它工作?!

                DateTime localFileTimeStamp = DateTime.Now; 
                DateTime fileTimeStampInDB;
                string cacheKey = string.Format("ImageId_{0}", 1);
                object o = Utils.Cache.Get(cacheKey);
                if (null == o)
                {
                    // get timestamp from DB
                    SqlCacheDependency dep;
                    fileTimeStampInDB = DataLayer.GetTimeStamp(1, out dep);
                    Utils.Cache.Insert(cacheKey, fileTimeStampInDB, dep, Cache.NoAbsoluteExpiration,
                        Cache.NoSlidingExpiration);
                    //, CacheItemPriority.Normal);
                    //new CacheItemRemovedCallback(WebUtils.CacheItemRemovedCallback));
                }

每次我将 timeupdated 字段设置为 getdate() 时,我的代码都会检测到对象 o 再次为空,这是应该的,因为它应该在过期后从缓存中删除,但为什么它会工作?我刚刚开始学习有关 SQLCacheDependency 的教程,所以也许我在阅读它们时遗漏了一些东西。

编辑:他们正在使用

SqlCacheDependency dependency = new SqlCacheDependency(command);

我想这不需要触发器。

如果您不喜欢这种方法并喜欢其他方法,请随时分享。

4

1 回答 1

0

不,您不需要这样的触发器。这一切都在Query Notifications上完成。阅读那篇文章,它解释了使用 ADO.NET 设置查询通知的 3 种方法。

正是这些查询通知通知底层结果集的更改。

于 2010-02-27T11:16:48.607 回答