1

この質問はすでに行われている可能性があります。申し訳ありません

私たちのモデルを検証するためのアーキテクチャを見ています。プロパティの検証属性 (一部のカスタム) を使用して、単純な検証を実現できます。

ModelState.IsValid

ただし、問題は、検証でデータベースへのアクセスまたは別のプロパティへのアクセスが必要な場合です。完璧な例は、重複した名前をチェックすることです。この場合、ID が現在のオブジェクトの ID と等しくない重複した名前がないかデータベースをチェックする必要があります (更新用)。

これを name プロパティに適用される検証属性として記述すると、問題が発生します。データベースへのアクセスを取得する方法と、id プロパティへのアクセスを取得する方法の 2 つ。

結論として。この問題の修正を設計するための良い方法の例はありますか?

4

1 に答える 1

0

私は今日、私が取り組んでいたプロジェクトのためにこれを調査するのに時間を費やし、これらの結論に達しました.

その方法を解決することは悪くありません。その多くは、いくつかのリフレクションと、モデルの他のプロパティを調べてアクセスするための検証コンテキストの使用、または IValidationObject の使用を伴います。本当の問題は、データベースとのやり取りを必要とする検証を行っても大丈夫かということです。

パフォーマンスについて懸念していたのは、ある特定のケースでは、検証によってオブジェクトを返すクエリが作成され、それが存在することを確認したため、後でリレーションシップの割り当てに必要になり、別のクエリが発生しました。

次に、データベースの並行性について考える必要があります。重複チェックを行う最善の方法は、挿入前ではなく挿入中に行うことです。これは、データベースが 2 つの操作の間で変更される可能性があるためです。これは、データベースがオブジェクトの存在を報告した直後にオブジェクトが削除される可能性があるという最初の理由にも関連しています。

私の特定のプロジェクトでは、EF コンテキストを変更し、ModelState に問題があるものを追加して、この種の動作を維持する方がよいと感じました。

于 2013-03-21T18:06:34.823 に答える