1

リレーショナルテーブル用のODataサービスを作成しました。外部キー関係を持つテーブルに投稿するとき、また呼び出しの数を減らすために、投稿クエリがどのように見えるかを理解しようとしています。

テーブルの例は次のとおりです。

  • PersonID
  • 名前
  • 電子メールアドレス

住居

  • レジデンスID
  • PersonID
  • 住所

居住テーブルに新しいエントリを作成するために、通常PersonID、名前または電子メールアドレスに基づいて検索し、Residenceテーブルに挿入します。

OData JSON APIを1回の呼び出しで使用して、同じことをどのように達成できますか?出来ますか?私はサービスをテストするためにフィドラーを使用しています。

前もって感謝します。

-ap

4

1 に答える 1

2

一般に、ODataでこれを行うための本当に良い方法はありませんが、読むのをやめないでください。理由を説明し、いくつかの提案を提供します。

本番環境でこれを行うことについて2回考える必要がある理由は、挿入プロセスが脆弱であるためです。データベースに同じ名前の人が2人いる場合はどうなりますか?その名前の人がいない場合はどうなりますか?名前のつづりを間違えた場合はどうなりますか?重複に対してHTTPエラーをスローしますか?彼らは挿入を再試行する必要がありますか?<-本質的に、ユーザーが新しいレコードにバインドするために特定のレコードを実際に選択しなかったために発生する質問がたくさんあります。前もって選択し、にバインディングを付けてPerson新しいものを挿入するだけで、このプロセスは大幅に簡素化されます。ODataの新しいJSON形式では、次のようになります。ResidencePersonID

{
    "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のバージョンに応じて、サービス操作またはアクションを使用して実行できます。

于 2012-10-15T23:47:14.533 に答える