【发布时间】:2011-11-07 12:56:08
【问题描述】:
我有一个带有 SQL Server 2005 数据库后端的 ASP.NET MVC 3 应用程序。它使用 LINQ to SQL 链接到数据库。在某些情况下,应用程序会更新数据库,但有时它仍会缓存不应缓存的旧数据。
例如,如果用户填写表单以发布BlogEntryComment(我的 LINQ to SQL 类型之一),它将被添加到数据库中。但是,新的BlogEntryComment 不会出现在我请求它的视图中。此外,如果我删除 BlogEntryComment,它仍会显示在视图中。以下是我对这种行为的确定:
不是浏览器缓存造成的。我已经清除了缓存;在不同的浏览器和不同的计算机上同时尝试;无济于事。
“顶级”类型不会发生这种情况,例如我的
BlogEntry类型。像BlogEntryComment这样的类型与我的“顶级”类型有关系(一个BlogEntry与许多cmets)会发生这种情况。如果我重新启动服务器,或者在其他服务器上尝试,它似乎会清除它所在的任何缓存,并且我不会得到错误的结果。
它最终会显示更新后的数据,但最终显示需要 15 分钟。
我已尝试关闭在 Web.config 中可以找到的所有类型的缓存选项:
...
<system.web>
...
<caching>
<outputCache enableOutputCache="false" enableFragmentCache="false">
</outputCache>
</caching>
<httpRuntime enableKernelOutputCache="false" />
</system.web>
<system.webServer>
...
<caching enabled="false">
</caching>
</system.webServer>
...
...但没有运气。有什么想法吗?
【问题讨论】:
-
您是如何获取数据的?您没有在某处缓存您的 l2s 数据上下文吗?
-
@Nik:我有一个用于整个应用程序的 DataContext 单例实例(类的静态成员)。所有控制器都去这个 DataContext 获取数据。
标签: asp.net asp.net-mvc linq-to-sql caching