1

大きなエンティティがあり、典型的な CRUD アプリケーションを作成したいとします。ユーザーは、エンティティの一部のフィールドを保存できません。

したがって、変更保存ロジックを実装する方法は 2 つあります。

a)

  1. DB からエンティティを取得する

  2. すべてのフィールドを含むページに出力 (ユーザーが変更できないフィールドは非表示の入力として出力)

  3. post メソッドでエンティティを取得

  4. コンテキストにアタッチして保存

この場合、ページの役に立たないフィールドにアウトする必要があります。そして、それは間違いなく最悪です。

b)

  1. DB からエンティティを取得する

  2. 必要なフィールドのみをページに出力 (ユーザーが変更できるフィールド)

  3. post メソッドでエンティティを取得

  4. DB からエンティティを取得する

  5. DB エンティティに新しい値を入力して保存

この場合、DB に追加のクエリを実行する必要があります。そのため、パフォーマンスには適していません。

正しい道とは?

4

3 に答える 3

2

または C):

  1. DB からエンティティを取得する
  2. 許可されたフィールドのみを使用してエンティティを ViewModel にマップする
  3. データを含む ViewModel をコントローラーにポストする
  4. ViewModel をエンティティにマップし直す
  5. 添付して保存します。

編集:前後のマッピングにはAutoMapperを強くお勧めします

于 2013-02-07T15:19:23.470 に答える
1

興味深いことに、Julie Lerman が作成したビデオを見たところ、彼女はほとんど同じ問題について話し合っています。あなたの解決策はどちらも彼女が行ったものではありませんでした:

画面に表示するフィールドを含む別のエンティティ クラスを用意しますが、通常のテーブルと同じテーブルにマップします。次に、エンティティを取得するためにその DbSet を照会し (それらのフィールドのみ)、更新を保存します。

彼女は、Entity Framework の上にドメイン駆動設計を実装することについて議論しているときに、これについて言及しました。そのため、アプリケーションのさまざまな機能にさまざまな DbContext がある場合でも、使用している DbContext をテーブルに書き込むことができますが、コンテキストが書き込むことができるフィールドを制限できます。

于 2013-02-07T15:20:33.703 に答える
0

ViewModelsタスクごとに異なるものを使用することをお勧めします。Modelユーザーに編集するいくつかのフィールドを表示したい場合は、データベースを作成してデータを入力するために使用EditModelし、保存しながらそれを行うことができCreateModelます。このようにして、データベース構造がユーザーに知られることを回避できるため、保護とセキュリティが確保されます。

于 2013-02-07T15:17:52.063 に答える