1

私はクエリを実行しています:

var query = entityQuery.from('Items').where(fullPredicate).orderBy(sortingColumn + ' ' + ordering).skip(numOfEntities * (pageNum - 1)).take(numOfEntities).inlineCount();

return manager.executeQuery(query)
                .then(querySucceeded)
                .fail(queryFailed);

コントローラーは次のようになります。

[Queryable(AllowedQueryOptions = AllowedQueryOptions.All,
                    AllowedFunctions = AllowedFunctions.AllFunctions,
                    MaxNodeCount = 10000)]
        [HttpGet]
        public IQueryable<Item> Items()
        {
            return _contextProvider.Context.Items.Include("A").Include("B").Include("C");
        }

応答は、すべてのアイテムとリンクされた (含まれる) アイテム (A、B、および C) を含む純粋な JSON ですが、inlineCount はありません。querySucceeded でデータを読み取るときに、inlineCount というパラメーターがありますが、未定義に設定されています。

以下を web.config に追加しようとしましたが、役に立ちませんでした。

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
    <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS" />
    <add name="Access-Control-Expose-Headers" value="X-InlineCount" />
  </customHeaders>
</httpProtocol>

同様に 1.4.0 から 1.4.2 にアップグレードしましたが、役に立ちませんでした。

4

2 に答える 2

2

Breeze.jsクライアントと Breeze Web Api サーバー コントロール (BreezeController) を使用して、サーバーが正しいinlinecount値で応答するようになりました。

標準の OData Queryableの代わりにBreezeQueryable属性を追加する必要があります。メソッドの上にこの属性を含めない限り、インラインカウントは Breeze コントローラーによるサーバー応答に含まれません。

したがって、次のサーバーコードで問題が解決しました。

[HttpGet, BreezeQueryable]
public IQueryable<FinDataModelsPublic.InvoicesView> InvoicesView(ODataQueryOptions<FinDataModelsPublic.InvoicesView> options, int custId)
{
    return FBll.InvoicesView(custId);
}

Bll.InvoicesView の上には、IQueryable の結果を返すデータ モデルのメソッドがあります。
お役に立てれば

于 2014-02-18T01:52:19.537 に答える