最佳答案
当我使用一个需要超过30秒才能完成的函数导入时,我使用实体框架(EF)得到超时。我尝试了以下方法,但未能解决此问题:
我将Default Command Timeout=300000
添加到具有EDMX文件的项目中的App.Config文件中的连接字符串中,如建议的在这里。
这是我的连接字符串的样子:
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
我尝试在我的存储库中直接设置CommandTimeout,如下所示:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
我还能做什么来从计时超时中获得EF ?这只发生在非常大的数据集上。对于小型数据集,一切都很好。
这是我得到的错误之一:
entitycommandexecutionexception:在执行命令定义时发生错误。详情请参阅内部异常。——> System.Data.SqlClient.SqlException:超时。操作完成之前的超时时间或服务器没有响应。
好吧,我把它弄好了,发生的事情很愚蠢。我有Default Command Timeout=300000
连接字符串和CommandTimeout设置为180。当我从连接字符串中删除Default Command Timeout
时,它工作了。所以答案是在你的存储库中手动设置CommandTimeout在你的context对象上,如下所示:
this.context.CommandTimeout = 180;
显然,在连接字符串中设置超时设置对它没有影响。