我有一个我想要执行的C#代码。
str = "SELECT u.LastName " +
",COALESCE(COUNT(DISTINCT pc.PhraseId), 0) AS CreatedByQty " +
", COALESCE(COUNT(DISTINCT pm.PhraseId), 0) AS ModifiedByQty " +
"FROM dbo.AspNetUsers u " +
"LEFT JOIN dbo.Phrase pc " +
"ON u.Id = pc.CreatedBy " +
"LEFT JOIN dbo.Phrase pm " +
"ON u.Id = pm.ModifiedBy " +
"GROUP BY u.LastName ";
threeColQuery = db.Database.SqlQuery<threeCol>(str);
threeColReport = await threeColQuery.ToListAsync();
return Ok(threeColReport);
我知道在SQL Server管理器中运行查询大约需要30秒。
在Web API调用中运行时,我得到了:
"innerException":{"message":"An error has occurred.","exceptionMessage":"The wait operation timed
有没有办法允许WebAPI调用运行长时间运行的查询?
答案 0 :(得分:2)
修改Entity Framework上的超时设置应该可以解决问题。
db.Database.CommandTimeout = 60;
我还建议不要通过连接字符串设置全局默认超时。对于大多数查询而言,一分钟太高了,您的30秒查询是规则的一个例外(因此您有意识地增加了超时时间)。
通过阻止应用程序中的所有超时异常,您将失去另一个查询行为不当的良好指示 - 导致长期性能问题。
答案 1 :(得分:0)