8

エンティティと2つの子エンティティのインスタンスを同時に作成しようとしています。

次のJSONを/user_objectsリソースに投稿すると、親のuser_objectエンティティとリンクされたUser_object_attributeエンティティが作成されます。唯一の問題は、結果セットを拡張して新しいuser_object_attributeを含めることができないため、user_objectの最新バージョンを効果的に使用できることですが、ODataサービスにアクセスして読み取る必要があります。つまり、別のサーバーがヒットします。 user_object_attributesを取得します。

戻ると、子のuser_object_attributeオブジェクトにきちんと入るIDがありますが、子がcreated_dateのようなサーバー側で生成されたフィールドをさらに持っている場合はどうなりますか?それでも、ODataリポジトリをもう一度ヒットする必要がありますか?

正しい$expandクエリ?$ expand = user_objects_attributesを試しましたが、作成が成功しても、展開された結果セットが返されません。

これが可能かどうか誰かが何か考えがありますか?それとも、すべての子user_object_attributesを返すことが唯一の方法であるためではないのでしょうか。

{
   "annotator_id":1,
   "content_type":"content_type",
   "created_date":"2013-02-15T17:20:09.191",
   "guid":"GUID",
   "size_kb":100,
   "title":"Title",
   "updated_date":null,
   "url":"URL",
   "user_object_id":0,
   "user_objects_attributes":[
      {
         "attribute_id":0,
         "name":"name191",
         "user_object_id":0,
         "value":"value191"
      }
   ]
}

ありがとう、マーク。

4

2 に答える 2

4

ここでOData V3仕様を見る:

バージョン 1.0 およびバージョン 2.0 では、挿入が完全に成功した場合、サーバーは 201 (Created) ステータス コードと、InsertEntity Request (セクション 2.2.7.1.1) で指定された構文に準拠する応答本文を含む応答を返す必要があります。サーバーがすべてのサーバー固有のデータ処理規則 (検証など) を実行した後、応答本文には、挿入されたリソースの値が含まれている必要があります。サーバーは、リソースがサーバーに挿入される前に、クライアントから受け取ったリソースの値を変更してもよい (MAY)。

バージョン 3.0 では、[RFC2616] で指定されているように、InsertEntity 要求のクライアント設定 (Prefer (セクション 2.2.5.9) を参照) に基づいて、応答に 204 ステータス コードが含まれる場合があります。

サーバーが何をすべきかは明確ではありません...最上位の作成されたエンティティ、またはそのエンティティとそのすべての展開されたリンクのみを返します。

$expand が POST (または任意の CUD リクエスト) に影響を与えないことは驚くことではありません。クエリでない場合、WCF DS はおそらくそれを無視します。そして、仕様上、これはおそらく正しいです。

率直に言って、WCF DS Server を使用すると、他に何も取り戻すことができないと思います。V3 では、エンティティ (のみ) で 201 を取得するか、コンテンツが必要ないことを示すヘッダーを指定した場合は 204 コンテンツなしを取得します。

それがODataに準拠しているかどうか...完全にはわかりません:-)。とにかく、現時点では、WCF DS スタックで必要なものを取得できるとは思いません。

于 2013-02-22T03:26:11.947 に答える