DbContext.Database.SetCommandTimeout在ef核心3.1中无法正常工作

时间:2020-09-11 15:51:15

标签: c# .net-core entity-framework-core ef-core-3.1

我有简单的代码,希望查询超时以测试异常日志记录,因此我正在使用context.Database.SetCommandTimeout()方法,提供最小值为1 tick的值,但查询不会超时并获取数据库中的数据。

我的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 个答案:

答案 0 :(得分:1)

RelationalDatabaseFacadeExtensions中运行SetCommandTimeout函数时,该函数中发生的事情是TimeSpan被转换为整数,而TimeSpan.FromTicks(1)将被转换为0。根据{{​​3}}的说法,

实施者注意,建议0表示没有超时。

因此,在这种情况下,这意味着TimeSpan.FromTicks(1)==没有超时,因此您能够输入的最小值必须等于int 1。