Проблема параллелизма данных с Linq .ToList () и SqlQuery - PullRequest
0 голосов
/ 22 февраля 2019

Мы сохраняем список записей из одного приложения, удаляя список элементов и сохраняя обновленный список (список всегда содержит менее 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, которая используется в нескольких приложениях без каких-либо проблем, таких как эта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...