在 MVC5/EF 6 中使用代码优先存储过程的超时问题.从存储的过程 dbo 读取时出错.[..]:超时已过期



为了一次处理近 70K 条记录,我在应用程序中使用了 codefriststorageprocs 2.5.0。由于记录很少,一切正常,但对于大量数据,我收到"等待操作超时"异常。我尝试通过以下方式将默认命令超时值从 30 秒修改为 600 秒。

//Previous approach
   ((System.Data.Entity.Infrastructure.IObjectContextAdapter)this.db).ObjectContext.CommandTimeout = 600;
//New approach for EF 6
this.db.Database.CommandTimeout = 600;

但在 30 秒后仍会收到连接超时消息。我还修改了 web.config 将连接超时值设置为 600 秒(我知道这与命令超时值不同,但试一试)。我觉得问题出在代码优先存储过程库上,在执行存储过程时将命令超时值更改为默认值。有没有办法解决此问题,或者我应该转到在我的应用程序中使用存储过程的替代方法。

提前谢谢。

首先,我要感谢CodeFirstStoredProcs团队为解决这个问题所做的努力和合作。

我想,如前所述,命令超时值可能已默认为 30 秒CodeFirstStoredProcs库中。

在他们的新版本(版本 2.6)中,他们在 CallStoredProc<> 方法中添加了"命令超时"参数,这有助于我设置命令超时的默认值终于解决了我的问题。

为了处理近 70K 条记录,我将CommandTimeout = 0设置为CallStoredProc<> 方法。这增加了无限的等待时间来执行存储程序。

再次感谢CodeFirstStoredProcs团队。 :)

更改为 EF6 时遇到了同样的问题。

您可能在错误的位置设置了命令超时。尝试在创建上下文的位置设置 CommandTimeout,如下所示:

var context = new Entities();
context.CommandTimeout = 600;

还要检查在创建上下文后,是否使用您的方法更改了命令超时。如果是这样,那么可能还有其他一些问题。

最新更新