PetShop中使用了拉SQL缓存依赖,使用拉SQL缓存依赖的项目只有在数据修改时才会立即失效。
使用拉SQL缓存依赖之前,必须执行下面两步配置:
1 对一个或多个数据库表启用SQL缓存依赖。
使用Microsoft.Net框架SDK程序组的SDK命令行提示程序执行aspnet_regsql命令行工具,例如
启用Pubs数据库的SQL数据库依赖,执行命令如下:
aspnet_regsql -C "Data Source=localhost;Integrated Security=True;Initial Catalog=Pubs" -ed
该命令创建AspNet_SqlCacheTablesForChangeNotification数据表。
启用一个数据库之后,就可以启用特定表的SQL缓存依赖:
aspnet_regsql -C "Data Source=localhost;Integrated Security=True;Initial Catalog=Pubs" -et -t Titles
该命令启用了Titles表的数据库依赖,将添加一行新数据在AspNet_SqlCacheTablesForChangeNotification数据表中。
按上面所述,可以添加PetShop相关表的SQL缓存依赖。
2 配置文件中配置SQL缓存依赖。
PetShop中相应部分配置如下:


<caching>
<sqlCacheDependency enabled="true" pollTime="10000">
<databases>
<add name="MSPetShop4" connectionStringName="SQLConnString1" pollTime="10000"/>
</databases>
</sqlCacheDependency>
</caching>
每隔10000毫秒检查数据库中的表的数据是否更新
对页面输出缓存使用拉SQL缓存依赖
举例:在其空间NavigationControl.ascx中,写代码如下:
<%@ OutputCache Duration="10000" VaryByParam="*"%>
this.CachePolicy.Dependency = new DependencyAccess().CreateCategoryDependency();//设定此控件的依赖项
依赖项的建立(CreateCategoryDependency()的大概实现):
利用类SqlCacheDependency,类AggregateCacheDependency进行实现,类SqlCacheDependency用来建立依赖项,类AggregateCacheDependency负责监视依赖项对象的集合。例如对库MSPetShop中的表Product,表Category建立依赖项。代码如下:
Code
SqlCacheDependency s1=new SqlCacheDependency("MSPetShop4","Product");
SqlCacheDependency s2=new SqlCacheDependency("MSPetShop4","Category");
AggregateCacheDependency cacheDependency = new AggregateCacheDependency();
cacheDependency.Add(s1);
cacheDependency.Add(s2);
return cacheDependency;
拉SQL缓存依赖建立成功。