Azure移动应用程序脱机同步 - URL长度限制,批量拉取,queryId长度

时间:2016-11-08 13:30:47

标签: azure-mobile-services

原则上,我花时间做了类似下面的事情。

public async Task<ItemA> GetItemsA(object someParams)
{
    var res = new List<ItemA>();
    var listOfItemAIds = await GetIdsFromServerAsync(someParams);
    var tableAQuery = _tableA.Where(x => listOfItemAIds.Contains(x.Id));
    await _tableA.PullAsync(null, tableAQuery);
    var itemsA= await tableAQuery.ToListAsync();
    var listOfItemBIds = itemsA.Select(x => x.bId).ToList();
    await _tableB.PullAsync(null, _tableB.Where(x => listOfItemBIds .Contains(x.Id));
    foreach(var itemA in itemsA)
    {
        itemA.ItemB = await _tableB.LookupAsync(itemA.itemBId);
    }
    return res;
}


有几个问题:

  • listOfTableAIds.Contains(x.Id)由于网址长度限制而导致错误
  • 由于无法代表listOfItemAIdslistOfItemBIds的内容queryId少于50个字符,我最终会提取我可能已有的数据
  • 遗憾的是,我所有的拉动都没有被分成一个服务器调用
  • 我可以直接从单个服务器查询中获得所需的全部内容,但之后我无法从Azure Mobile Sync框架中受益

有关如何改进该序列的任何建议?

1 个答案:

答案 0 :(得分:0)

我建议您优化一些内容,以便查询更简单。您可以整体提取更多数据,但随后该数据将在tableB中可用。例如,您可能想说“itemBId不为空”。