Проблема тайм-аута при использовании codefirststoredprocs в MVC5/EF 6. Ошибка чтения из сохраненного proc dbo. []: время ожидания истекло

Чтобы обрабатывать почти 70 000 записей за раз, я использую codefriststoredprocs 2.5.0 в своем приложении. С несколькими записями все работает нормально, но с большим набором данных я получаю исключение «Операция ожидания истекла». Я попытался изменить значение времени ожидания команды по умолчанию с 30 до 600 секунд следующим образом.

//Previous approach
   ((System.Data.Entity.Infrastructure.IObjectContextAdapter)this.db).ObjectContext.CommandTimeout = 600;

//New approach for EF 6
this.db.Database.CommandTimeout = 600;

но по-прежнему получает сообщение о тайм-ауте соединения через 30 секунд. Я также изменил параметр web.config для значения времени ожидания соединения до 600 секунд (я знаю, что это другое значение, чем значение времени ожидания команды, но попробуйте). Я чувствую, что проблема связана с библиотекой codefirststoredprocs, которая при выполнении хранимой процедуры изменяет значение тайм-аута команды на значение по умолчанию. Есть ли способ исправить эту проблему или мне следует перейти к альтернативному подходу к использованию хранимых процедур с моим приложением.

Заранее спасибо.


person prashantchalise    schedule 13.11.2013    source источник


Ответы (2)


Во-первых, я хотел бы поблагодарить команду CodeFirstStoredProcs за их усилия и сотрудничество в решении этой проблемы.

Я предполагаю, как упоминалось ранее, значения времени ожидания команды могли быть установлены по умолчанию на 30 секунд внутри библиотеки CodeFirstStoredProcs.

В своем новом выпуске (версия 2.6) они добавили параметр «время ожидания команды» в метод CallStoredProc<> , что помогло мне установить значение по умолчанию для времени ожидания команды и, наконец, решило мою проблему.

Чтобы обработать почти 70 тыс. записей в моем случае, я установил метод CommandTimeout = 0 в CallStoredProc<> . Это добавляет бесконечное время ожидания для выполнения хранимой процедуры.

Еще раз спасибо за команду CodeFirstStoredProcs. :)

person prashantchalise    schedule 28.11.2013
comment
Конструктор new StoredProc<Model>() { commandTimeout = 0 } - person codeMonkey; 14.03.2020

У меня возникла такая же проблема при переходе на EF6.

Возможно, вы устанавливаете CommandTimeout в неправильном месте. Попробуйте установить CommandTimeout там, где вы создаете контекст, например так:

var context = new Entities();
context.CommandTimeout = 600;

Также проверьте, был ли изменен CommandTimeout с вашим подходом после создания контекста. Если так, то может быть какая-то другая проблема.

person Juha Saarenpää    schedule 26.11.2013