根据此article,在Microsoft CRM中如何管理分页cookie存在严重错误。简而言之,当尝试以一对多关系检索超过5000条记录时,会出现错误。作者声明,由于父实体不包含唯一的guid,因此分页cookie也不会是unqiue,这可能导致在检索下一页记录时有大量记录丢失。
有没有人遇到过这个错误?你是怎么绕过它的?
当然,一种方法是将查询转为使用子实体作为主要实体。通过这种方式,每条记录都将是独一无二的。但这不是最佳解决方案,因为我必须在代码中手动更改它。
我注意到的另一种方式是,当我在子实体上指定这样的顺序时:linkedEntity.Orders.Add(OrderType.Ascending)
,那么分页cookie将始终为空。这消除了记录丢失的问题,但据我了解,这会导致SQL中的大量开销。
最好的方法当然是如果有任何方法可以使分页cookie同时包含父记录和子记录。但我还没有找到任何办法。有什么想法吗?
答案 0 :(得分:2)
我经历过这个。
我只是不使用分页cookie来处理它,你仍然可以在没有它的情况下正确地进行分页。
例如:
int fetchCount = 3;
int pageNumber = 1;
int recordCount = 0;
QueryExpression pagequery = new QueryExpression("account");
while (true)
{
EntityCollection results = _serviceProxy.RetrieveMultiple(pagequery);
if (results.Entities != null)
{
foreach (Account acct in results.Entities)
{
Console.WriteLine(acct.Id);
}
}
if (results.MoreRecords)
{
pagequery.PageInfo.PageNumber++;
//pagequery.PageInfo.PagingCookie = results.PagingCookie; <-- Don't add the paging cookie here
}
else
{
break;
}
}