【问题标题】:Entity Framework seems to be caching data实体框架似乎正在缓存数据
【发布时间】:2015-07-14 10:36:27
【问题描述】:

我的问题是,当我编写一个基本的 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?

【问题讨论】:

  • 您能展示一下您的查询是如何构建的吗?完整的 LINQ 语句?
  • 嗨,Kamo,我已经编辑了我的问题。
  • 再次查询时,您是否正在创建一个新实例 ef context,如果不是,则查询它的缓存的是 ef
  • 谢谢,这就是问题所在。

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


【解决方案1】:

您的 DbContext 实例是静态的:

private static ApplicationDbContext Da = new ApplicationDbContext();

因此每个 AppDomain,因此它一直存在,直到您回收应用程序池。 DbContext 保存了它之前看到的项目的缓存,直到你 call the Refresh() method

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

【讨论】:

  • 喜欢您的陈述“每个请求创建一个实例”的清晰性。
猜你喜欢
  • 2012-12-13
  • 2013-10-02
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多