1

私はmvc3プロジェクトの1つで最初にEFコードを使用しています。複雑なEFPOCOオブジェクトをビューとの間で受け渡すときに使用するパターンについて質問があります。

たとえば、customerオブジェクトには注文のリストがあり、各注文にはアイテムのリストがあります。カスタマーオブジェクトがビューに送信されます。ビューは、顧客オブジェクトとその内部オブジェクト(注文、アイテム)を更新してから、コントローラーに送り返します。コントローラには、顧客オブジェクトを永続化するためのEFがあります。

私の質問は次のとおりです。

  1. ビュー内で使用できるように、EF pocoオブジェクトをJSONオブジェクトにシリアル化する必要がありますか?

  2. ビューから更新を受け取ったときに、顧客オブジェクトを再構築するにはどうすればよいですか?

  3. 顧客オブジェクトが再構築された後、オブジェクトグラフ全体(顧客、注文、アイテム)を一度に保存することは可能ですか?

ありがとう

4

2 に答える 2

3

私は、ビューのモデルとしてEFPOCOオブジェクトを使用しない傾向があります。ビューに必要なものが単一のEFPOCOオブジェクトと完全に一致することは決してないため、通常は1つ以上のPOCOオブジェクトからビューモデルを作成します。次に、ビューモデルはEFオブジェクトを作成し、それがDBに保存されます。

于 2012-10-22T18:53:33.873 に答える
1
  1. ビュー内で使用できるように、EF pocoオブジェクトをJSONオブジェクトにシリアル化する必要がありますか? いいえ。
  2. ビューから更新を受け取ったときに、顧客オブジェクトを再構築するにはどうすればよいですか?しないでください。デフォルトのmodelbinderがPOSTされたデータをビューモデル(またはeditmodel)に実体化し、そのデータを使用して下位層にコマンドを発行します。
  3. 顧客オブジェクトが再構築された後、オブジェクトグラフ全体(顧客、注文、アイテム)を一度に保存することは可能ですか?そうですが、すべきではありません。代わりに、ユースケースに基づいて各更新を個別に処理してください。

ここでmojo722とPlucのアドバイスに従ってください。MVCレイヤーでEFPOCOエンティティを使用しないでください。ビューモデルを使用します。仕組みは次のとおりです。

  • コントローラはデータを必要とし、下位層に要求します。下位層はデータを取得し、エンティティ(またはさらに良いのはエンティティビュー)を返します。
  • コントローラはエンティティをビューモデルに変換します(AutoMapperはこれに適していますが、手動でマップすることもできます)。
  • コントローラはviewmodelsをviewに渡します。
  • ViewはHTMLフォームからHTTPPOSTデータを送信します。
  • デフォルトのモデルバインダーは、HTTPPOSTされたフォームデータをビューモデルに変換します。
  • コントローラはビ​​ューモデルデータを受信し、下位層にコマンドを発行します。
  • 下位層はEFを使用して新しいエンティティの状態を保存します。
于 2012-10-22T19:00:48.060 に答える