我有一个简单的LINQ-to-EF查询,但由于某种原因它停止工作了,我的意思是一旦执行它,执行控制就永远不会返回到下一行。我无法弄清楚为什么会这样。如果我在LINQPad中使用LINQ-to-SQL运行相同的查询,则可以正常工作。以下是查询:
Models.Currency curr = _db.Currencies.SingleOrDefault(x => x.ISO == p.Items[i].CurrType);
这里的_db
是我的实体容器引用,p.Items[i].CurrType
包含了值 "USD"。
可能出现了什么问题?我应该使用哪些诊断工具?
TIA - e!
p.s. 我正在使用带有MVC5的Visual Studio 2013。
* 更新 I *
根据下面的建议,在我的连接字符串(Web.config)中添加了"Connection Timeout = 10"并在*.Context.cs中添加了命令超时,如下所示:
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 10;
}
查询仍然挂起(永远不会超时抛出异常),当查询挂起时,我查看了数据库。我可以看到发出的SQL语句看起来(或多或少)像:
select * from Currencies
由于该表只有100条小记录,因此应该立即返回。发出查询的连接正在睡眠并等待命令,并且数据库中没有阻塞;所涉及的spid执行了0个CPU / IO操作。
我还应该看什么?