实体框架不遵守命令超时
Posted
技术标签:
【中文标题】实体框架不遵守命令超时【英文标题】: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命令需要很长时间吗?之后也可以在内存中处理。
【参考方案1】:
检查一下:
实体框架 6:
this.context.Database.CommandTimeout = 180;
实体框架 5:
((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 180;
Entity Framework 4 及以下:
this.context.CommandTimeout = 180;
【讨论】:
以上是关于实体框架不遵守命令超时的主要内容,如果未能解决你的问题,请参考以下文章