2

我们有一个首先使用 EF 代码调用的视图。它使用 Linq 语法并且很简单。工作一段时间后,查询在 ToList 方法处超时。即使在那个时候,查询也可以从 SSMS 立即运行。

注意到的一件事是删除并重新创建视图可以解决问题,但是在无限期之后问题又出现了。

数据库位于 SQL Azure 上,并检查了对象上的任何锁,但没有找到任何东西。

有没有人遇到过这样的问题或类似的问题。能否请你帮忙???

被阻止的实际查询

var results = facilityId == Guid.Empty ?
                            (from c in Context.CallLists
                             where c.AgencyId == agencyId
                             select c)
                               :
                            (from c in Context.CallLists
                             where c.AgencyId == agencyId && c.InitiatedFacilityId == facilityId
                             select c);

if (request.Page > 0)
            {
                results = results.Skip((request.Page - 1) * request.PageSize);
            }

        return results.Take(request.PageSize);
4

1 回答 1

0

IOrderedQueryable<T>通过调用.OrderBy()beforeSkip和将其更改为 a Take。我认为它目前正在从表中检索所有行。通常我预计会抛出异常,但我不确定为什么没有抛出 - 你在使用结果吗?您是否尝试使用 Page > 0 运行它?

尝试这个:

var results;

if (facilityId != Guid.Empty)
{
    results = Context.CallLists.Where(c => c.AgencyId == agencyId).OrderBy(c => c.Something);
}
else
{
    results = Context.CallLists.Where(c => c.AgencyId == agencyId && c.InitiatedFacilityId == facilityId).OrderBy(c => c.Something);
}

if (request.Page > 0)
{
    results = results.Skip((request.Page - 1) * request.PageSize);
}

return results.Take(request.PageSize);

除此之外,您还需要想出一种方法来处理 SQL Azure 暂时性错误。这基本上是在 SQL Azure 中执行查询时可能引发的错误子集,应通过等待和重试操作来处理,通常会增加重试之间的等待时间,直到您最终接受失败。在此处此处阅读有关它的更多信息。

于 2013-04-01T12:28:46.443 回答