2016-11-08 17 views
0

概略的には、私は次のようなことをするのに時間を費やします。Azure Mobile Appオフライン同期 - URLの長さの制限、バッチプル、queryIdの長さ

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)は、50未満のqueryIdlistOfItemAIdsまたはlistOfItemBIdsの内容を表すことができないとして
  • によるURLの長さの制限のためにエラーにつながりますchars、私はすでに持っているかもしれないデータを引き上げることになります
  • 私のすべてのプルが単一のサーバーコールにバッチ処理されていないことは残念です
  • 私が直接、単一のサーバーのクエリから、私は必要なすべてを得ることができたが、その後、私は

Azureのモバイル・シンク・フレームワークからそのシーケンスを改善する方法上の任意の提案の利益ではないでしょうか?

答えて

0

クエリを簡単にするように改良することをお勧めします。あなたは全体的により多くのデータを取得するかもしれませんが、そのデータはtableB内で利用可能になります。たとえば、 "itemBIdがnullでない場所"と言うことができます。

+0

@adrianを見ていただきありがとうございます。しかし私はそれを "よりシンプル"なので私のポストにすることはできません。私は、pullasync httpをカスタムHTTPポストにリダイレクトすることになります... –