Entity Framework超时问题

19 浏览
0 Comments

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日
0
0 Comments

如果您正在使用DbContext,请使用以下构造函数设置命令超时:

public class MyContext : DbContext
{
    public MyContext ()
    {
        var adapter = (IObjectContextAdapter)this;
        var objectContext = adapter.ObjectContext;
        objectContext.CommandTimeout = 1 * 60; // value in seconds
    }
}

0
0 Comments

已知在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;

0