#c# #.net-core #entity-framework-core #ef-core-3.1
#c# #.net-ядро #entity-framework-core #ef-core-3.1
Вопрос:
У меня есть простой код, в котором я хочу, чтобы запрос имел тайм-аут для проверки моего ведения журнала исключений, поэтому я использую context.Database.SetCommandTimeout()
метод, указывающий минимальное значение в 1 тик, но запрос не истекает по тайм-ауту и извлекает данные из базы данных.
Моя версия EF — EF Core 3.1.8.
Код выглядит следующим образом:
await using var context = new CriusCommissionsDatabaseContext(_config);
context.Database.SetCommandTimeout(TimeSpan.FromTicks(1));
var saleSegments = await context.BSaleSegment
.Include(x => x.Sale)
.Where(x => x.Sale.CorrelationId == correlationId)
.ToListAsync();
Ответ №1:
При запуске SetCommandTimeout
функции в RelationalDatabaseFacadeExtensions что происходит в функции, так это то, что интервал времени преобразуется в целое число и TimeSpan.FromTicks(1)
будет преобразован в 0
. Согласно DbCommand.Свойство CommandTimoout имеет следующие замечания
Примечание для разработчиков, рекомендуется, чтобы 0 означало отсутствие тайм-аута.
Так что в данном случае это означает промежуток времени.FromTicks(1) == нет таймаута, поэтому минимальное значение, которое вы могли бы ввести, должно быть равно int 1.