私は、WCF データ サービスによって提供される OData サービスを使用して、単純なシナリオだと思っていたものを実装しようとしています (今のところ、OData V3 application/json;odata=verbose ペイロード形式を使用します。将来的には JSON Light 形式を使用する可能性があります)。 . 基本的なシナリオは次のようになります。
私は2つのエンティティを持っています:
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual PersonCategory Category { get; set; }
}
class PersonCategory
{
public int ID { get; set; }
public string Description { get; set; }
public virtual ICollection<Person> People { get; set; }
}
ここで、Person の簡単な編集ページを作成したいと思います。この編集ページには、名前の入力と、人物のカテゴリの入力またはドロップダウンがある場合があります。
したがって、シナリオは次のようになります。
- コードは、カテゴリに $expand を使用して Person をダウンロードします: GET /api.svc/People(1)?$expand=Category
- ユーザーは、個人の Name プロパティとそのカテゴリの両方を編集します。
- ページのコードは、その人の名前とカテゴリのプロパティを更新する単一の要求を作成します。
ここでの鍵は「単一の要求」にあります。これは、ドキュメントを見つけるのに苦労している部分です。上記の 3 番を 2 つのリクエストに分割する例を見てきました。このようなもの (正確な形式は覚えていません。PUT を実行する前にカテゴリ リンクを削除する必要があるかどうかもわかりません):
PATCH /api.svc/People(1) with content: {"Name": "new name" }
PUT /api.svc/People(1)/$links/Category with content: { "url": "/api.svc/Categories(2)" }
しかし、Person エンティティへの他の変更とインラインで指定された Category ナビゲーション プロパティへの変更を使用して、この更新を単一の要求として実装することが可能であると言われていますが、実証はされていません。誰かがこれがどのように行われるかの例を教えてもらえますか? また、上記で説明した 1 対多ではなく、多対多のナビゲーション プロパティを使用してそれを行う方法を教えてください。
そして最後に、私は現在、詳細な JSON 形式である V3 を使用しています。代わりに新しい JSON ライト形式を使用した場合、上記の質問に対する回答は異なりますか? もしそうなら、どのように?