2011-11-07 130 views
0

我有一个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> 
... 

...但没有运气。有任何想法吗?

+0

您是如何获取数据的?你没有缓存你的l2s数据上下文吗? – Nik

+0

@Nik:对于整个应用程序,我有一个DataContext的单例实例(一个类的静态成员)。所有控制器都转到这一个DataContext中获取数据。 – walterbing1

回答

2

查看l2s DataContext的文档。它的意思是短暂的 - 即创建和处理每个http请求。如果它按照您描述的那样是静态的,那么只要应用程序域一样,它就会生活。

最有可能发生的事情是,您的DC留在内存中,随后的数据请求不会到达db。 15分钟或其他任何事情之后,您的应用程序域将进行回收,您将获得全新的DC和新数据。

+1

这工作完美。我现在每次都创建一个新的DataContext对象。谢谢! – walterbing1

1

检查您的动作为[OutputCache]装饰。它覆盖了web.config