2

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-apiのチュートリアルに従って、いくつかの読み取り専用 Web Api OData サービスを作成できました。そのため、ODataConventionModel ビルダーを使用して、一連のエンティティ (ちなみに Telerik ORM からのもの) からモデルを作成しています。これはすべて正常に機能しているようで、サービスでクエリを発行したり、メタデータを表示したりできます。

私は今、他の CRUD 操作に注意を向けようとしました - 最初に作成し、問題に遭遇しました! つまり、Post メソッドは正しく起動されますが (CreateEntity)、エンティティ パラメーターは null です。ModelState.IsValid をチェックすると、ID (キー) 値が null であることが問題であることがわかります。データベースは ID 列にデータベース生成 ID を使用するため、エンティティがデータベース コンテキストに保存されるときに ID が作成されるため、これは当然のことです。

したがって、ID列をデータベース生成としてマークするあらゆる方法を試しましたが、何も見つかりませんでした。不思議なことに、誰かがこれを求めている投稿が 1 つも見つからないようです。

EF モデル ビルダー(たとえば、ここ: http://forums.asp.net/t/1848984.aspx/1 ) を見ると、.HasDatabaseGeneratedOption プロパティを使用してモデル ビルダーに影響を与える手段があるように見えますが、 System.Web.Http.OData に相当するオプションはありません。

したがって、質問は次のとおりです。

  1. コントローラーがオブジェクトを受け入れ、null キー値でもエンティティを逆シリアル化するように、モデル ビルダー (または他の何か) を変更する手段はありますか?
  2. もしそうなら、どうすればこれを行うことができますか?
  3. そうでない場合、他のオプションに関する提案はありますか?

クライアント要求から (この場合は) 整数値をオブジェクトに入力する可能性があることは認識していますが、これは a) 意味論的に間違っているようであり、b) クライアント ツールキットの結果として必ずしも常に可能であるとは限りません。利用される。

すべての助けに感謝します!

どうもありがとう、

J.

4

2 に答える 2

1

ID パラメータを含まない挿入用のビューモデルを作成する必要があります。Automapper を使用して、受信挿入モデルのプロパティをデータ エンティティにマップします。

あなたが抱えている問題は、ID が指定されるべきではない挿入時を除いて、PK であるため、ID がデータ モデルの必須属性であることです。

于 2013-06-25T21:05:11.337 に答える