实体框架的SQL连接超时错误

时间:2018-09-21 06:18:02

标签: sql .net entity-framework asp.net-core

我正在使用table立即更新entity framework中的2600条记录。

它以前工作正常,但是现在突然开始每次都抛出timeout error

timeout属性设置为150。

此外,多个用户同时使用application

下面是code

    foreach (var k in context.Keywords.Where(k => k.CurrentDailyCount > 0))
            {
               k.CurrentDailyCount = 1;
            }

            context.SaveChanges();

这是我面临的error

enter image description here

enter image description here

error背后的问题是什么?工作正常,但突然开始抛出timeout error

2 个答案:

答案 0 :(得分:0)

var entries = context.Keywords.Where(k => k.CurrentDailyCount > 0) ?? new List<Keyword>(); 
foreach (var k in entries)
{
   k.CurrentDailyCount = 1;
}

await context.SaveChangesAsync();
  1. 将过滤后的关键字存储在变量中以节省时间进行搜索: context.Keywords.Where(k => k.CurrentDailyCount > 0)
  2. 确保 过滤的关键字绝不为空?? new List<Keyword>()
  3. 异步保存记录await context.SaveChangesAsync();

答案 1 :(得分:0)

首先,您可以考虑只选择primaryKey字段和CurrentDailyCount。你可以像

context.Keywords.Select(x => new Keyword(){
   PrimaryKeyColumn = x.primaryKeyColumn,
   CurrentDailyCount = x.currentDailyCount 
}).Where(k => k.CurrentDailyCount > 0)

此外,您还应该检查sql语句的执行时间。如果CurrentDailyCount列未建立索引,则您的代码会收到超时错误也就不足为奇了。

  

超时属性设置为150。

您要解决哪个超时问题?是SQL连接超时还是Kestrel服务器超时?如果将SQL超时期限设置为150,并且kestrel超时值为默认值(即120s),则代码达到120秒时就会中断。