Ошибка тайм-аута соединения SQL с Entity Framework - PullRequest
0 голосов
/ 21 сентября 2018

Я обновляю 2600 записей в table сразу с entity framework.

Раньше это работало, но теперь неожиданно начинало каждый раз выдавать timeout error.

Для свойства timeout установлено значение 150.

Кроме того, несколько пользователей одновременно используют application.

Ниже code:

    foreach (var k in context.Keywords.Where(k => k.CurrentDailyCount > 0))
            {
               k.CurrentDailyCount = 1;
            }

            context.SaveChanges();

Это error, с которым я сталкиваюсь:

enter image description here

enter image description here

В чем может быть проблема этого error?Он работал нормально, но внезапно начал бросать timeout error.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Во-первых, вы можете рассмотреть возможность выбора только поля primaryKey и CurrentDailyCount.Вы можете сделать это как

context.Keywords.Select(x => new Keyword(){
   PrimaryKeyColumn = x.primaryKeyColumn,
   CurrentDailyCount = x.currentDailyCount 
}).Where(k => k.CurrentDailyCount > 0)

А также вы должны проверить время выполнения вашего оператора SQL.Если столбец CurrentDailyCount не проиндексирован, неудивительно, что ваш код получает ошибку тайм-аута.

Для свойства тайм-аута установлено значение 150.

К какому тайм-ауту вы обращаетесь?это тайм-аут соединения SQL или тайм-аут сервера Kestrel?Если для периода ожидания SQL задано значение 150, а значением времени ожидания для kestrel является значение по умолчанию (равное 120 с), ваш код прерывается, когда он достигает 120 секунд.

0 голосов
/ 21 сентября 2018
var entries = context.Keywords.Where(k => k.CurrentDailyCount > 0) ?? new List<Keyword>(); 
foreach (var k in entries)
{
   k.CurrentDailyCount = 1;
}

await context.SaveChangesAsync();
  1. Сохранить отфильтрованные ключевые слова в переменной в время сохранения , необходимое для поиска: context.Keywords.Where(k => k.CurrentDailyCount > 0)
  2. Убедитесь, что отфильтрованные ключевые слова никогда не равны : ?? new List<Keyword>().
  3. Сохранение записей Асинхронно : await context.SaveChangesAsync();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...