实体框架似乎是缓存数据

时间:2015-07-14 10:36:28

标签: c# asp.net-mvc entity-framework

我的问题是,当我编写一个基本的EF查询来从数据库中获取数据时,它会正确地检索数据,但是当我更改SQL Server数据库中的数据并重新加载查询时,我得到了相同的数据集,而不是新的数据。数据需要一段时间才能成为修改后的信息。

var mm = o.GetContent(page, title);

例如,上述查询将带回

mm.Body = "Test";

然后,如果我将SQL Server数据库中的Body更改为Test1并重新加载查询,则它不会带回Test1

public String GetContent(String page, String title)
{
    var o = new DataContext();

    var mm = o.GetContent(page, title);

    return HttpUtility.HtmlDecode(mm.Body);
}

public class DataContext
{
    private static ApplicationDbContext Da = new ApplicationDbContext();

    public Content GetContent(String page, String title)
    {
        return Da.Content.SingleOrDefault(c => c.Page == page && c.Title == title);
    }   
}

我访问了很多SO帖子:

Prevent Caching in ASP.NET MVC for specific actions using an attribute

ASP.NET MVC how to disable automatic caching option?

1 个答案:

答案 0 :(得分:4)

您的DbContext实例是静态的:

declare @varTest varchar(100);
Set @varTest = Upper('test')
select * from act_msgs m,node_name nn
where Upper(msg_name) like '%' + varTest +'%'
and nn.node_name = '$1'

因此,每个AppDomain,它一直存在,直到您回收应用程序池。 private static ApplicationDbContext Da = new ApplicationDbContext(); 保留了之前看到过的商品缓存,直到call the Refresh() method为止。

但不要这样做。不要让它变得静止。使用实体框架作为工作单元,尽可能缩小范围。每个请求创建一个实例。