【问题标题】:Entity Framework not respecting Command Timeout实体框架不遵守命令超时
【发布时间】:2017-09-13 09:48:38
【问题描述】:

我在使用基于实体框架的 API 时遇到了问题,其中第 3 方开发人员错误地发送了太大的查询并导致系统性能下降。我已通知他们停止练习,但我想将查询限制为 1 分钟,然后将其切断。

听起来我应该能够在构造函数中设置命令超时(如下所示)。当我使用长查询对其进行测试时,它完全按照以前(3 分钟以上)的方式执行查询,它似乎根本不尊重命令超时。

我做错了吗?这不是命令超时预期的工作方式吗?它是异步的,命令超时是否不适用于异步?任何解决方案或指针将不胜感激。

public class CustomContext : DbContext
{
    public CustomContext(string connectionName)
        : base(connectionName)
    {
        var objectContext = (this as IObjectContextAdapter).ObjectContext;
        objectContext.CommandTimeout = 60;
    }

    public CustomContext(EntityConnection connection)
        : base(connection, contextOwnsConnection: false)
    {
        var objectContext = (this as IObjectContextAdapter).ObjectContext;
        objectContext.CommandTimeout = 60;
    }
}

【问题讨论】:

  • 一方面,您可以使用this.Database.CommandTimeout。根据我的经验(Sql Server),它可以正常工作。你确定是SQL命令需要很长时间吗?之后也可以在内存中处理。

标签: c# sql entity-framework entity-framework-6


【解决方案1】:

检查一下:

实体框架 6:

this.context.Database.CommandTimeout = 180;

实体框架 5:

((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;

Entity Framework 4 及以下:

this.context.CommandTimeout = 180;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-29
    • 2015-02-04
    • 2020-04-04
    • 1970-01-01
    • 2011-09-08
    • 2018-09-13
    • 2015-09-14
    相关资源
    最近更新 更多