Мне было интересно, возвращает ли оператор FirstOrDefault значение NULL, если для DbContext настроено EnableRetryOnFailure.
Включение параметров EnableRetryOnFailure устранило ошибки взаимоблокировки, но теперь вызывает нулевые указатели для запросов, когда существующий элемент извлекается из базы данных.
Наша конфигурация выглядит так:
services.AddDbContext<CoreContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("Default"),
builder => { builder.EnableRetryOnFailure(7, TimeSpan.FromMilliseconds(750), null); }
);
});
Query:
await queryWithInclude.FirstOrDefaultAsync(v => v.Id == id)
Хотя строку запроса можно было заменить на First (), мне было интересно:
Операция взаимоблокировки может быть повторена и исправлена повторной попыткой (это
похоже, временная ошибка)
Я ожидал исключения при достижении maxRetries и
запрос не выполняется. Запрос имеет несколько включений.