Почему у NHibernate session.Query <T> () .Delete () тайм-аут?

Я обнаружил, что начиная с NHibernate 5.0 я могу вызвать следующий код для удаления всех записей таблицы:

session.Query<T>().Delete();

Он выполняет код в базе данных, не копируя его по сети, что должно значительно повысить производительность. Но этот запрос истекает.

Я получаю следующую ошибку:

Execution Timeout Expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.

Я попытался установить для параметра Connection Timeout в моей строке подключения значение 0 и 3600, но это не имеет значения.

В моей таблице всего около 200 записей. Но один столбец представляет собой PDF-файл с кодировкой base64, поэтому он довольно большой, и запрос займет несколько секунд.

Что еще можно попробовать?

Мне удалось обойти эту ошибку, используя session.Query <T> () .Timeout (600) .Delete () ;. Но я чувствую, что это временный обходной путь. Я был бы признателен за лучшее объяснение / понимание того, почему это необходимо.

Quintonn 14.04.2018 11:07

Вы изучили активность своей базы данных (SQL Server?) Изолированно? Например, если вы запустите запрос DELETE FROM MyTable WHERE MyColumn = 1; (или любой другой правильный запрос), какова производительность? Есть ли какие-то разногласия в этой таблице, которые приводят к блокировке DELETE?

David Osborne 16.04.2018 11:15
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
243
1

Ответы 1

Похоже, вам нужно увеличить время ожидания команды.

Обратите внимание, что есть разница между тайм-аут соединения и тайм-аут команды.

Вы можете установить время ожидания команды по умолчанию (в секундах) для команд ADO.NET, созданных NHibernate, используя свойство конфигурации сеанса command_timeout NHibernate. Есть несколько способов сделать это в зависимости от того, какой метод вы используете для настройки NHibernate. Вот основы: http://nhibernate.info/doc/nhibernate-reference/session-configuration.html

Другие вопросы по теме