执行表值函数时的实体框架超时

时间:2017-01-04 17:12:25

标签: entity-framework user-defined-functions

我有一个SQL Server 表值函数;让我们将其称为<a href="/external.html" target="_self">external</a>,我将其导入到我的Entity Framework数据模型中。我将其返回类型设置为现有实体MyTVF

直接执行该功能需要一瞬间,但是当通过EF MyEntity执行时,它会超时,并显示以下消息:

  

执行超时已过期。超时时间过去之前   完成操作或服务器没有响应。

执行EF生成的SQL来执行该功能也需要一瞬间。

我如何诊断这里出了什么问题?

1 个答案:

答案 0 :(得分:-1)

首先,您需要查看正在生成的SQL。您可以在IQueryable对象查询上调用ToString()(在调用ToList(),ToArray(),Count(),Single(),SingleOrDefault()等之前),或者更好的是,您可以在数据库中设置一个值。记录如下:

ctx.Database.Log += (s) => Console.Log(s);

之后,尝试直接在数据库中运行完全相同的查询,看看会发生什么。 在不太可能的情况下,您需要增加执行超时,您可以将其设置为:

((IObjectContextAdapter)ctx).ObjectContext.CommandTimeout = somevalue;