加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何使用SqlDependency使OutputCache依赖于每个请求

发布时间:2020-12-16 04:33:33 所属栏目:asp.Net 来源:网络整理
导读:我有个问题.无法找到如何使OutputCache SQLDependency依赖于数据库表中的一行. 例如. 我有一个带有一个参数的控制器. ActionResult Index(int? id) 对于具有相同id的每个请求,我需要检查数据库表table1(id int,last_updated datetime).如果具有id = id和last
我有个问题.无法找到如何使OutputCache SQLDependency依赖于数据库表中的一行.
例如.
我有一个带有一个参数的控制器.
ActionResult Index(int? id)

对于具有相同id的每个请求,我需要检查数据库表table1(id int,last_updated datetime).如果具有id = id和last_updated的行未更改.

我使用sql server 2005或更高版本.

我应该使用哪种策略?

我试过用:

[OutputCache(Duration = int.MaxValue,VaryByParam = "id",SqlDependency = "DatabaseName:table1")]

但它适用于整个表格的更改.

解决方法

为避免针对每个网页请求(通常是昂贵的操作)访问数据库,可以使用对象缓存(在.NET 4.0中引入).这将导致快速提供网页,因为所有内容都将直接从内存中处理.仅当数据实际更改时,或者由于资源限制或CacheItemPolicy设置而导致缓存从内存中逐出时,才会发生数据库操作.

在这种情况下使用的实用策略如下.

步骤1.在您的Model方法中,正在修改/添加/删除“id”行的数据,完成该数据库操作,然后:

>如果您的对象已存在于缓存中,则将其逐出;
> Create a new cache entry为对象.

第2步.尽可能从缓存中检索对象,仅在必要时从db刷新:

>从Controller操作方法中,调用Model方法,该方法返回由“id”参数标识的对象;
>在Model方法中,检查此id的缓存.如果为null,则从数据库中检索数据并像通常那样构建对象,然后将完整对象存储在缓存中;
>从Model方法中,将缓存的内容(即此id的特定对象)返回给调用Controller操作方法,然后让action方法像往常一样填充并提供View.

(MemoryCache类是ObjectCache类的具体实现).

使用这种方法,根本不需要使用Controller方法上的OutputCache,并且数据缓存决策都将完全封装在Model中.我们会更清楚地分离关注点;更高的效率,更好的响应时间和更高的可扩展性;并减少对昂贵的数据库操作的依赖.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读