如何在aspnetcore / entityframeworkcore中设置命令超时

时间:2016-08-20 20:25:18

标签: asp.net-core entity-framework-core

设置命令超时的位置不再与早期版本相同。

但是,我找不到任何说明如何改变它的地方。

我正在做的是上传非常大的文件,这需要超过默认的30秒才能保存。

请注意,我在另一个问题中询问命令超时,而不是迁移超时。

5 个答案:

答案 0 :(得分:37)

如果您正在使用DI容器来管理DbContext(即您将DbContext添加到服务集合中),则可以在选项中指定命令超时。

在Startup.ConfigureServices中:

services.AddDbContext<YourDbContext>(options => options.UseSqlServer(
    this.Configuration.GetConnectionString("YourConnectionString"),
    sqlServerOptions => sqlServerOptions.CommandTimeout(60))
);

答案 1 :(得分:18)

您可以通过上下文更改

jQuery(document).click(function(e) {
                if (jQuery(e.target).is('a')) {
                    swal({
                        title: "Are you sure?",
                        text: "Want to continue without saving?",
                        type: "warning",
                        showCancelButton: true,
                        confirmButtonColor: "#DD6B55",
                        confirmButtonText: "Leave",
                        closeOnConfirm: false,
                        html: false
                        }

                    );
                }    
        }); 

答案 2 :(得分:5)

如果您只想为一个 Context 实例设置临时增加超时。

假设有 1 个请求(默认的 Scoped 上下文生存期)

在长时间运行的查询之前更改此设置:

Context.Database.SetCommandTimeout(TimeSpan.FromMinutes(20))

使用范围生命周期,您可以仅指定超时一次,并且您不必在任何后续服务构造函数注入中指定它。

答案 3 :(得分:1)

在 EF Core 3 及更高版本中,您现在可以通过连接字符串进行配置。但是您需要从'System.Data.SqlClient'迁移到'Microsoft.Data.SqlClient'

System.Data.SqlClient 替换为 Microsoft.Data.SqlClient 2.1.0 版 或更高版本。

然后在您的连接字符串中简单地附加命令超时,如下所示:

"Data Source=SqlExpress;Initial Catalog=YourDatabase;Integrated Security=true;Command Timeout=300"

这仅适用于 Microsoft.Data.SqlClient 2.1.0 或更高版本,如果您使用 System.Data.SqlClient 尝试此操作,则会出现异常。

答案 4 :(得分:0)

更好的选择是在上下文设置期间使用CommandTimeout,例如:

public class DbConnect: IConnnectDb
{
    private dbentitient _context;

    // inject this to a db entity from constructor. 

    //inside each method now use the follow before u actually run the query to db.  

    _context.Database.SetCommandTimeout(400);
}     

注意:EF Core只会在少于100秒的时间内执行查询。如果它不止于它继续重试,你永远不会看到结果。

这是我目前的经历,所以如果你能解决它,请告诉我 EF Core 1.0的超时速度甚至超过EF Core 2.0。