ナビゲーション プロパティを持つエンティティの C# での ODATA 投稿リクエストは、新しいナビゲーション プロパティを作成します

R.フィールズ

私は Odata を始めたばかりの初心者で、次のエンティティの Odata Api を定義しました。

[Table("clients", Schema = "dbo")]
public class Client
{

    public int Id { get; set; }

    [Required]
    public String Name { get; set; }


}

[Table("orders", Schema = "dbo")]
public class Order
{

    public int Id { get; set; }

    public DateTimeOffset Date { get; set; } = DateTimeOffset.Now;

    [Required]
    public virtual Client Client { get; set; }

    public String Comment { get; set; }

}

クライアント エンティティの名前と注文エンティティのナビゲーション プロパティには、「必須」という注釈が付けられています。これは、コントローラーのモデルを検証するために Attribute Routing Api を使用しているためです。

Id 1 (データベースに既に存在する) のクライアントに新しい注文を投稿 (挿入) する場合、本文に次の json オブジェクトを含む投稿リクエストを Odata エンドポイントに送信します。

{
  "Date": "2017-03-16T08:28:47.700Z",
  "Client": {
    "Id": 1
  },
  "Comment": "Something"
}

そして、次のエラー メッセージが表示されます。

{
  "error": {
    "code": "",
    "message": "The request is invalid.",
    "innererror": {
      "message": "Order.Client.Name : Das Feld \"Name\" ist erforderlich.\r\n",
      "type": "",
      "stacktrace": ""
    }
  }
}

英語に翻訳すると、エンティティ クライアントのフィールド名が必須であることを意味します。

最初の質問: 投稿リクエストでナビゲーション プロパティを表す完全なオブジェクトを送信せずに、Odata でナビゲーション プロパティ (fk) を持つエンティティをすべてのフィールドとともに投稿/挿入するにはどうすればよいですか? ナビゲーション プロパティの ID/プライマリ キーのみを送信することはできませんか?

リクエストでナビゲーション プロパティとして使用される完全なエンティティを送信すると、注文はデータベースに作成されますが、奇妙なことが起こります。ナビゲーション プロパティ「クライアント」は無視され、同じ名前の新しいクライアントがこのために作成されます。挿入されたエンティティ...

つまり、注文はテーブルに作成されますが、指定された名前を使用して新しいクライアントが作成されたため、注文の client_id は 1 ではありません。しかし、IDは無視されました...

私が間違っていることは何ですか?

前もって感謝します。

ジョン・リトル

クライアントの外部キーを注文に追加して、それを投稿するだけです。これは、クライアントがすでに存在し、注文にクライアントが 1 つしかないことを前提としています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ