在.NET1.1下面Cache只能基于文件系统、对象等做Cache的依赖项,但是在.NET 2.0提供了一个新的依赖项SqlCacheDependency,这个项使我们Cache依赖数据库的变化来改变。虽然这做法看起来和1.1里面的变通做法相似,但是它们之间还是有本质的区别(SqlCacheDependency对象的提供)。(1.1的变通做法是为数据表创建触发器,然后该触发器在触发的时候会修改一个本地文件,系统中的某一个Cache的依赖项就是这个本地的文件,这样来通知Cache所缓存的数据变化了) .NET 2.0的SqlCacheDependency可以在SqlServer2000以后的版本使用,本文介绍在Sql Server 2000下的使用方法,Sql Server 2005的稍有不同。
首先需要安装.NET 2.0的框架,当然Sql Server 2000一定要有了。在.NET 2.0里微软提供了一个实用工具:aspnet_regsql(和aspnet_regiis在同一个目录下面),这是一个命令行工具,该命令行参数可以通过aspnet_regsql -?获得。这里我们关心下面几个参数:-ed为SQL缓存依赖项启动数据库,-E使用当前的windows凭据进行身份验证,-d用于应用服务器的数据库名称,如果未指定任何数据库名称,则使用默认数据库“aspnetdb”。本文中将使用微软的示例数据库pubs。那么我们就要使用下面的命令行来创建缓存依赖数据库:
通过执行上面的命令以后,aspnet_regsql会为authors创建一个触发器,下面是我执行该命令后创建的触发器: SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO ALTER TRIGGER dbo.[authors_AspNet_SqlCacheNotification_Trigger] ON [authors] FOR INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON EXEC dbo.AspNet_SqlCacheUpdateChangeIdStoredProcedure N'authors' END