一般に、ODataでこれを行うための本当に良い方法はありませんが、読むのをやめないでください。理由を説明し、いくつかの提案を提供します。
本番環境でこれを行うことについて2回考える必要がある理由は、挿入プロセスが脆弱であるためです。データベースに同じ名前の人が2人いる場合はどうなりますか?その名前の人がいない場合はどうなりますか?名前のつづりを間違えた場合はどうなりますか?重複に対してHTTPエラーをスローしますか?彼らは挿入を再試行する必要がありますか?<-本質的に、ユーザーが新しいレコードにバインドするために特定のレコードを実際に選択しなかったために発生する質問がたくさんあります。前もって選択し、にバインディングを付けてPerson
新しいものを挿入するだけで、このプロセスは大幅に簡素化されます。ODataの新しいJSON形式では、次のようになります。Residence
PersonID
{
"odata.type": "My.User",
"ReferredBy@odata.bind": "http://.../MyService.svc/Users('haoche')",
"BillingAddress": {
"odata.type": "My.Address",
"City": "Clinton",
"Line1": "23456 Cleveland St",
"Line2": null,
"State": "TX",
"ZipCode": "98052"
},
"DisplayName": "David Hamilton",
"FavoriteTags": [],
"JoinedAt": "2012-10-05T14:14:43.1229977-07:00",
"LastSeenAt": "2012-10-05T14:14:43.1269991-07:00",
"UserID": "davham"
}
ここ"ReferredBy@odata.bind"
に、リンク先の人のIDを入力します。新しいOData形式を使用していない場合、ペイロードは次のようになります(例2を参照)。恥知らずなプラグイン:これが、新しいJSON形式を使用する必要がある理由です:)。
したがって、私が持っている主な提案は、2つの操作を1つに結合しようとするのではなく、ユーザーに最初にデータを検索させることを強くお勧めします。ただし、実際に1つの操作を実行するように設定されている場合は、使用しているODataのバージョンに応じて、サービス操作またはアクションを使用して実行できます。