ASP.NET MVC 3错误缓存输出
我有一个ASP.NET MVC 3应用程序与SQL Server 2005数据库后端。它使用LINQ to SQL链接到数据库。在某些情况下,数据库将被应用程序更新,但有时仍会缓存不应获取缓存的旧数据。ASP.NET MVC 3错误缓存输出
例如,如果用户填写表单发布BlogEntryComment
(我的一个LINQ to SQL类型),它将被添加到数据库中。但是,新的BlogEntryComment
不会显示在我的要求它的意见。另外,如果我删除了BlogEntryComment
,它仍然显示在视图中。以下是我对此行为的确定:
这不是由浏览器缓存引起的。我清除了缓存;在不同的浏览器和不同的计算机上同时尝试;无济于事。
这不会发生在“顶级”类型中,例如我的
BlogEntry
类型。它与BlogEntryComment
类型发生在我的“顶级”类型中有关系(对许多评论有一个BlogEntry
)。如果我重新启动服务器,或尝试在不同的服务器上,它似乎清除它所在的任何缓存,并且我不会得到错误的结果。
它最终会显示更新的数据,但最终需要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 DataContext的文档。它的意思是短暂的 - 即创建和处理每个http请求。如果它按照您描述的那样是静态的,那么只要应用程序域一样,它就会生活。
最有可能发生的事情是,您的DC留在内存中,随后的数据请求不会到达db。 15分钟或其他任何事情之后,您的应用程序域将进行回收,您将获得全新的DC和新数据。
这工作完美。我现在每次都创建一个新的DataContext对象。谢谢! – walterbing1
检查您的动作为[OutputCache]
装饰。它覆盖了web.config
。
您是如何获取数据的?你没有缓存你的l2s数据上下文吗? – Nik
@Nik:对于整个应用程序,我有一个DataContext的单例实例(一个类的静态成员)。所有控制器都转到这一个DataContext中获取数据。 – walterbing1