我们通过删除项目列表并保存更新后的列表来保存一个应用程序的记录列表(该列表始终少于10个项目):
using (var context = GetContext())
{
EFConfiguration.SuspendExecutionStrategy = true;
using (var dbContextTransaction = context.Database.BeginTransaction())
{
try
{
context.ItemTable.RemoveRange(context.ItemTable.Where(d => d.ForeignKey == foreignKey));
foreach (var item in items)
{
SetTimeStampFields(item);
context.ItemTable.Add(item);
}
int i = await context.SaveChangesAsync();
dbContextTransaction.Commit();
EFConfiguration.SuspendExecutionStrategy = false;
}
catch (Exception)
{
dbContextTransaction.Rollback();
EFConfiguration.SuspendExecutionStrategy = false;
throw;
}
}
}
这些更改将立即显示在数据库中。然后,我们从另一个应用程序中从该表中提取信息:
var itemList = await context.ItemTable.ToListAsync();
应用程序似乎在初次部署时会获取更新的值,但之后它们将停留在相同的值。我曾尝试在.ToListAsync()之前添加AsNoTracking()来尝试绕过任何缓存,因为这是只读数据,但没有用。我发现实时获取数据的唯一解决方案是:
var itemList = await context.ItemTable.SqlQuery("Select * from TableName").ToListAsync();
有问题的表包含具有主键,两个外键和一些时间戳记数据的记录。
我的问题是,为什么上下文不会从表中获取更新的值?此问题在本地和已部署环境中表现出来。这是一个使用Entity Framework 6的ASP.NET Core应用程序。所讨论的数据库是成熟的SQL Server 2012数据库,可在多个应用程序中使用,而不会出现诸如此类的问题。