Gre*_*Gum 28 c# entity-framework-core asp.net-core
设置命令超时的位置不再与早期版本相同.
但是,我找不到任何说明如何改变它的地方.
我正在做的是上传非常大的文件,这需要超过默认的30秒保存.
请注意,我在另一个问题中询问命令超时,而不是迁移超时.
Car*_*man 59
如果您正在使用DI容器来管理DbContext(即您正在将DbContext添加到服务集合中),则可以在选项中指定命令超时.
在Startup.ConfigureServices中:
services.AddDbContext<YourDbContext>(options => options.UseSqlServer(
this.Configuration.GetConnectionString("YourConnectionString"),
sqlServerOptions => sqlServerOptions.CommandTimeout(60))
);
Run Code Online (Sandbox Code Playgroud)
小智 23
你可以通过你的上下文来改变它
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
{
Database.SetCommandTimeout(150000);
}
}
Run Code Online (Sandbox Code Playgroud)
Ros*_*sim 18
在 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"
Run Code Online (Sandbox Code Playgroud)
这仅适用于Microsoft.Data.SqlClient 2.1.0 或更高版本,如果您使用 System.Data.SqlClient 尝试此操作,则会出现异常。
小智 7
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);
}
Run Code Online (Sandbox Code Playgroud)
注意:EF Core 只会执行时间小于 100 秒的查询。如果超过这个值,它会不断重试,而您永远看不到结果。
这是我目前的经验,所以如果您能够修复它,请告诉我 EF Core 1.0 的超时速度甚至比 EF Core 2.0 更快。
如果您只想为一个 Context 实例临时增加超时。
假设 1 个请求(默认的 Scoped 上下文生命周期)
在长时间运行的查询之前更改此设置:
Context.Database.SetCommandTimeout(TimeSpan.FromMinutes(20))
Run Code Online (Sandbox Code Playgroud)
使用范围生命周期,您可以只指定一次超时,而不必在任何后续服务构造函数注入中指定它。
| 归档时间: |
|
| 查看次数: |
20444 次 |
| 最近记录: |