如何在实体框架中为每个命令指定特定于命令的超时
本文关键字:命令 于命令 超时 框架 实体 | 更新日期: 2023-09-27 18:01:29
我希望所有正常命令的默认超时为30秒,但对于一个存储过程,我需要5分钟。
我不想这样做,除非这是唯一的方法。
public partial class AContext : DbContext
{
public AContext(string connectionString)
: base(connectionString)
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 300;
}
}
如何仅将超时附加到此查询?
Context.Database.SqlQuery<AAAAA>("usp_AAAAA");
您可以直接在DbContext的Database属性上设置CommandTimeout,而无需尝试从DbContext中获取对象上下文。
创建一个新的DbContext实例,然后删除它。
如果你有一个共享DbContext实例,你将不得不在try/finally块中包装调用,并在finally中重置超时,这样即使在失败的情况下超时也会被重置。
using(var Context = new AContext())
{
Context.Database.CommandTimeout = 60*5; // 5 minutes
var result = Context.Database.SqlQuery<AAAAA>("usp_AAAAA");
}
如果Context是共享的
try
{
Context.Database.CommandTimeout = 60*5; // 5 minutes
var result = Context.Database.SqlQuery<AAAAA>("usp_AAAAA");
}
finally{
Context.Database.CommandTimeout = null; // reset
}