0

次のような医師のグラフがあります。

医師グラフ

WebApi バックエンドからデータを取得するために使用するクエリは次のようになります。

      var query = new breeze.EntityQuery().from("Physicians")
    .expand("ContactInfo")
    .expand("ContactInfo.Phones")
    .expand("ContactInfo.Addresses")
    .expand("PhysicianNotes")
    .expand("PhysicianSpecialties")
    .where("ContactInfo.LastName", "startsWith", lastInitial).take(5);

(ContactInfo は People オブジェクトの仮名であることに注意してください)

私が見つけたのは、Contact.Phones の拡張を要求すると、電話だけが取得され、Notes や Specialties は取得されないということです。電話をコメントアウトすると、Contact.Addresses が取得され、他のコレクションは取得されません。ContactInfo と Phones および Addresses をコメント アウトすると、Notes のみが取得されます。基本的に、一度に 1 つのコレクションしか取得できないようです。

それで、これは組み込みの「プログラマーが自分の足を撃たないようにする」ことですか?? 保護するか、何かを有効にする必要がありますか?

または、このグラフは複雑すぎますか?? NoSql オブジェクト ストアを検討する必要がありますか??

ありがとう

4

2 に答える 2

1

JYはあなたにどのように話しましたか?ただし、パフォーマンスへの影響に注意してください...データ層とネットワーク上の両方で。一度に広く深く掴みすぎると惨めな死に方をすることがあります。

私はtake(5)彼のサンプルで見ました。これは、ランナウェイ リクエストを抑制するために重要です (サーバー上でも実行しなければならないことです)。一般に、この種の拡張グラフ フェッチは、単一のルート エンティティをプルするクエリ用に予約します。選択用のリストを提示していて、エンティティ グラフのさまざまな部分からのデータが必要な場合は、プロジェクションを使用して、表示する必要があるものを正確に取得します (もちろん、すぐに使用できる SQL ビューがないと仮定します)。この目的)。

関連項目のいずれかが参照リスト (色、ステータス、状態など) である場合は、準備ステップでそれらを個別にキャッシュに入れることを検討してください。expandそれらを;に含めないでください。Breeze は、クライアント上のそれらをクエリされたエンティティに自動的に接続します。

最後に、構文の問題として、セグメントの名前を繰り返す必要はありません。「ContactInfo.Phones」と記述すると、ContactInfos と Phones の両方が取得されるため、「ContactInfo」自体を指定する必要はありません。

于 2013-02-22T17:08:59.833 に答える
1

次のように、すべての expand 句を 1 つの句にまとめる必要があります。

var query = new breeze.EntityQuery().from("Physicians")
    .expand("ContactInfo, ContactInfo.Phones, ContactInfo.Addresses, PhysicianNotes, PhysicianSpecialties")
    .where("ContactInfo.LastName", "startsWith", lastInitial).take(5);

ここでドキュメントを参照できます: http://www.breezejs.com/sites/all/apidocs/classes/EntityQuery.html#method_expand

于 2013-02-21T17:36:52.503 に答える