MVC从缓存或旧数据库中提取数据

时间:2013-06-13 16:50:00

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

我有一个C#mvc3应用程序,它使用实体框架从我的SQL服务器数据库中提取数据。我发现它似乎是在拉“旧”或“缓存”数据而不是数据库中当前存在的数据。

一旦我更新了模型,它似乎就会提取新数据。

我的问题是如何确保我始终从数据库中提取“实时”数据而不是获取“缓存”或“旧”数据?

当我运行以下代码并检查tblcompanyinfo.companyname的值时,它返回了一个旧的公司名称(与当前在DB中的名称不同)。

更新模型并重新运行后,它返回了公司名称的当前值。

private static ApptReminderEntities db = new ApptReminderEntities();
tblCompanyInfo tblcompanyinfo = db.tblCompanyInfoes.SingleOrDefault(t => (t.CompanyID == lCompanyID));

谢谢!

2 个答案:

答案 0 :(得分:5)

这可能是由于您的共享和静态DbContext Instance

private static ApptReminderEntities db = new ApptReminderEntities();

将其替换为使用块,如下所示:

using(ApptReminderEntities db = new ApptReminderEntities())
{
  tblCompanyInfo tblcompanyinfo = db.tblCompanyInfoes
                              .SingleOrDefault(t => (t.CompanyID == lCompanyID));
}

使用using语句,

  • 每次都创建新的ApptReminderEntities实例。
  • 在数据库中做任何你想做的事。
  • 使用是自动关闭和处理您的实例。

因此,对于每次数据访问,请使用using,以便每次都创建上下文的新实例。

答案 1 :(得分:1)

问题在于您没有为每个查询创建新的上下文 - 您已将其定义为静态。

您应该始终为数据库中的每个操作创建一个新的ApptReminderEntities

您可以使用存储库模式或类似模式。就我而言,我会做的每一项操作

var employees = new EmployeeRepository().GetEmployees();

并在Employee存储库构造函数中,它创建了一个new EmployeeEntities()

这使得单元测试变得非常容易,因为我可以重载我的存储库并传入虚拟上下文。