2012-02-21 8 views
3

私は本質的に再帰的なクラスモデルを持っています。 テンプレートソケットは私が通常で終わる多くのテンプレートオブジェクト WCF Data Servicesを使用して完全なオブジェクトグラフを返す方法は?

を受け入れ

  • 多くソケットオブジェクトが含まれてい

    • :として簡潔にするために、私はそれを説明しますオブジェクトグラフは次のようになります。

      Root Template 
          |--> Sockets 
            |--> Socket S1 
            |  |--> Templates 
            |    |--> Template T1 
            |    |--> Template T2 
            |      |--> Sockets 
            |        |--> Socket S1.1 
            |--> Socket S2 
              |--> Templates 
                |--> Template T2 <-- it's valid to reuse templates 
                |--> Template T3 
                etc 
      

      オブジェクトグラフ全体をWCF Data Services経由でワンショットで返したいと考えています。

      私は完全なグラフを構築し、私のDataServiceにカスタムメソッドを追加しました:

      [WebGet] 
          public IEnumerable<Template> GetFullyExpandedTemplate(Guid templateId) 
          { 
           var result = _templateRepo.GetFullyExpandedTemplate(a => a.Id == templateId); 
           return new List<Template>() { result }; 
          } 
      

      結果は間違いなく検証(完全に実装された状態である。しかし、私は次のように参照する場合:。

      http://localhost/MySite/MyDataService.svc/GetFullyExpandedAggregate?id=guid'353934DD-916E-43EC-9CAE-EAB8FA894EBA' 
      

      私はルートテンプレートオブジェクトのみを表示します。グラフ全体を返しません。

      で最もクリーンなアイデアこれを実現する方法はありますか?

  • 答えて

    0

    $ expand urlオプションはあなたに適していますか?ただし、カスタムメソッドの代わりにエンティティセットのクエリに切り替える必要があるかもしれません。

    +0

    再帰的であるため、クライアントはオブジェクトグラフの深さがどれだけ深いか分かりません。この特定のアプリケーションのコンテキストでは、オブジェクトグラフを一度に戻すことが最も効果的な方法と思われます。 –

    0

    AFAIKはできません。せいぜい、サービスオペレーションに対する要求を傍受し、完全展開でURIにリダイレクトすることができますが、展開パスは依然として静的になります。

    関連する問題