我有一个SQL Server 表值函数;让我们将其称为<a href="/external.html" target="_self">external</a>
,我将其导入到我的Entity Framework数据模型中。我将其返回类型设置为现有实体MyTVF
。
直接执行该功能需要一瞬间,但是当通过EF MyEntity
执行时,它会超时,并显示以下消息:
执行超时已过期。超时时间过去之前 完成操作或服务器没有响应。
执行EF生成的SQL来执行该功能也需要一瞬间。
我如何诊断这里出了什么问题?
答案 0 :(得分:-1)
首先,您需要查看正在生成的SQL。您可以在IQueryable对象查询上调用ToString()(在调用ToList(),ToArray(),Count(),Single(),SingleOrDefault()等之前),或者更好的是,您可以在数据库中设置一个值。记录如下:
ctx.Database.Log += (s) => Console.Log(s);
之后,尝试直接在数据库中运行完全相同的查询,看看会发生什么。 在不太可能的情况下,您需要增加执行超时,您可以将其设置为:
((IObjectContextAdapter)ctx).ObjectContext.CommandTimeout = somevalue;