如何在实体框架中为每个命令指定特定于命令的超时

本文关键字:命令 于命令 超时 框架 实体 | 更新日期: 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
}