设置命令超时的位置不再与早期版本相同。
但是,我找不到任何说明如何改变它的地方。
我正在做的是上传非常大的文件,这需要超过默认的30秒才能保存。
请注意,我在另一个问题中询问命令超时,而不是迁移超时。
答案 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。