Entity Framework超时问题
Entity Framework超时问题
在使用需要大于30秒完成的函数导入时,使用Entity Framework(EF)时我遇到了超时问题。我尝试了以下方法,但无法解决此问题:
我根据这里建议,将Default Command Timeout=300000
添加到包含EDMX文件的项目中的App.Config文件的连接字符串中。
这是我的连接字符串:
我尝试直接在我的存储库中设置CommandTimeout,如下所示:
private TrekEntities context = new TrekEntities(); public IEnumerable GetKirksFriends() { this.context.CommandTimeout = 180; return this.context.GetKirksFriends(); }
我还能做些什么来防止EF超时?这仅发生在非常大的数据集上。对于小数据集,一切正常。
以下是我遇到的错误之一:
System.Data.EntityCommandExecutionException: 在执行命令定义时发生错误。请参见内部异常以获取详细信息。---> System.Data.SqlClient.SqlException: 超时已过期。 操作完成之前超时时间已到期,或服务器未响应。
好的-我搞定了,发生了一个愚蠢的错误。我将Default Command Timeout=300000
和CommandTimeout设置为180的连接字符串都保留了。当我从连接字符串中去掉Default Command Timeout
时,它起作用了。所以答案是在上下文对象上手动设置存储库的CommandTimeout:
this.context.CommandTimeout = 180;
显然,在连接字符串中设置超时设置不起作用。
admin 更改状态以发布 2023年5月24日
已知在EF连接字符串中指定默认命令超时存在bug。
https://bugs.mysql.com/bug.php?id=56806
从连接字符串中删除该值,并在数据上下文对象本身中设置它。如果从连接字符串中删除冲突的值,则此方法会起作用。
Entity Framework Core 1.0:
this.context.Database.SetCommandTimeout(180);
Entity Framework 6:
this.context.Database.CommandTimeout = 180;
Entity Framework 5:
((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;
Entity Framework 4及以下版本:
this.context.CommandTimeout = 180;