指定された値が一意かどうかをチェックするカスタム ValidationAttribute を書きたいと思います。
問題は、編集画面で、ユーザーが実際に値を変更したことが保証されず、誤ったエラーが発生することです。
値が実際に変更されたかどうかを属性で確認する方法はありますか? または、値が変更された場合にのみ属性をトリガーできますか?
この要件は属性に属していないのではないでしょうか?
指定された値が一意かどうかをチェックするカスタム ValidationAttribute を書きたいと思います。
問題は、編集画面で、ユーザーが実際に値を変更したことが保証されず、誤ったエラーが発生することです。
値が実際に変更されたかどうかを属性で確認する方法はありますか? または、値が変更された場合にのみ属性をトリガーできますか?
この要件は属性に属していないのではないでしょうか?
ValidationAttibuteと言うとき、DataAnnotationsを使用することを意味しますか?もしそうなら、これはすべて当てはまります、そうでなければ、申し訳ありませんが、私は誤解しました、そしてこれの一部だけが当てはまります。
最善の策は、リポジトリまたはBLLで、レコードの一意のキーを使用してこれを行うことだと思います。少なくとも、これが私が行った方法です。レコードの以前の値を取得し、それらが変更されたかどうかを確認します。それらが変更された場合は、一意性チェックを実行します。
このロジックをValidationAttributeに組み込むことができれば、より強力になりますが、それらを回避する方法があるため、validationAttributeが最適かどうかはわかりません。これらの属性についての私の理解から、モデルを検証する唯一の方法としてではなく、ビジネスロジックの検証の補足としてのみ使用する必要があります。
DataAnnotationsの詳細については、こちらをご覧ください
編集:十分に公平です、今私があなたを助けるために答えを与えることができるかどうか見てみましょう:)このリンクをチェックしてください、それは任意のテーブルの任意のプロパティの一意性チェックのためのコードです。かなり詳細なLINQtoSQLのものですが、うまく機能しているように見えます。<Required>
または<StringLenght>
属性を使用するのと同じように、これで任意のプロパティを装飾できるはずです。