Мы сохраняем список записей из одного приложения, удаляя список элементов и сохраняя обновленный список (список всегда содержит менее 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();
Приложение, похоже, получает обновленные значения при первом развертывании, но после этого они привязываются к тем же значениям.Я попытался добавить AsNoTracking () перед .ToListAsync (), чтобы попытаться обойти любой кеш, так как это данные только для чтения, но это не сработало.Единственное решение, которое я нашел для получения данных в режиме реального времени:
var itemList = await context.ItemTable.SqlQuery("Select * from TableName").ToListAsync();
В рассматриваемой таблице хранятся записи с первичным ключом, двумя внешними ключами и некоторыми временными метками.
Мой вопрос: почему контекст не заберет обновленные значения из таблицы?Эта проблема проявляется в локальных и развернутых средах.Это базовое приложение ASP.NET, использующее Entity Framework 6. Рассматриваемая база данных является зрелой базой данных SQL Server 2012, которая используется в нескольких приложениях без каких-либо проблем, таких как эта.