我有个问题。找不到如何使 OutputCache SQLDependency 依赖于数据库表中的一行。
例如。
我有一个带有一个参数的 Controller 。
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步。在修改/添加/删除“id”行数据的模型方法中,完成该数据库操作,然后:
第2步。尽可能从缓存中检索对象,仅在必要时从数据库刷新:
(MemoryCache 类是 ObjectCache 类的具体实现)。
使用这种方法,根本不需要使用 Controller 方法上的 OutputCache,并且数据缓存决策将全部封装在 Model 中。我们将获得更清晰的关注点分离;更高的效率、更短的响应时间和更高的可扩展性;减少对昂贵的数据库操作的依赖。
关于asp.net - 如何使带有 SqlDependency 的 OutputCache 依赖于每个请求的数据库中的一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9587749/