C# 实体框架似乎正在缓存数据
我的问题是,当我编写一个基本EF查询从数据库获取数据时,它会很好地检索数据,但是当我更改SQL Server数据库中的数据并重新加载查询时,我会返回相同的数据集,而不是新数据。而且数据需要一段时间才能成为修改后的信息C# 实体框架似乎正在缓存数据,c#,asp.net-mvc,entity-framework,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 GetCo
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帖子:
您的DbContext实例是静态的:
private static ApplicationDbContext Da = new ApplicationDbContext();
因此,每个AppDomain都是如此,因此它一直存在,直到您回收应用程序池为止。DbContext
保存以前看到的项目的缓存,直到您找到它为止
但不要那样做。不要让它静止。使用实体框架作为工作单元,尽可能缩小范围。为每个请求创建一个实例。您能说明如何生成查询吗?完整的LINQ语句?嗨,Kamo,我已经编辑了我的问题。再次查询时,您是否正在创建您的新实例
ef context
,如果您不是,则是ef正在查询它的缓存谢谢,这就是问题所在。就像您的语句“每个请求创建一个实例”的清晰性一样