我有一个C#mvc3应用程序,它使用实体框架从我的SQL服务器数据库中提取数据。我发现它似乎是在拉“旧”或“缓存”数据而不是数据库中当前存在的数据。
一旦我更新了模型,它似乎就会提取新数据。
我的问题是如何确保我始终从数据库中提取“实时”数据而不是获取“缓存”或“旧”数据?
当我运行以下代码并检查tblcompanyinfo.companyname的值时,它返回了一个旧的公司名称(与当前在DB中的名称不同)。
更新模型并重新运行后,它返回了公司名称的当前值。
private static ApptReminderEntities db = new ApptReminderEntities();
tblCompanyInfo tblcompanyinfo = db.tblCompanyInfoes.SingleOrDefault(t => (t.CompanyID == lCompanyID));
谢谢!
答案 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()
这使得单元测试变得非常容易,因为我可以重载我的存储库并传入虚拟上下文。