C#でデータ注釈を使用する方法

データ注釈(System。ComponentModel。DataAnnotations名前空間の一部として使用可能)は、クラスまたはクラスメンバーに適用して、クラス間の関係を指定し、UIでのデータの表示方法を記述し、検証ルールを指定できる属性です。この記事では、データアノテーション、それらが役立つ理由、および.NETCoreアプリケーションでの使用方法について説明します。

この記事で提供されているコード例を使用するには、システムにVisual Studio2019がインストールされている必要があります。まだコピーをお持ちでない場合は、こちらからVisual Studio2019をダウンロードできます。 

Visual Studio2019でコンソールアプリケーションプロジェクトを作成する

まず、VisualStudioで.NETCoreコンソールアプリケーションプロジェクトを作成しましょう。Visual Studio 2019がシステムにインストールされていると仮定して、以下に概説する手順に従って、VisualStudioで新しい.NETCoreコンソールアプリケーションプロジェクトを作成します。

  1. Visual StudioIDEを起動します。
  2. 「新しいプロジェクトの作成」をクリックします。
  3. 「新規プロジェクトの作成」ウィンドウで、表示されたテンプレートのリストから「コンソールアプリ(.NETCore)」を選択します。
  4. [次へ]をクリックします。 
  5. 次に表示される[新しいプロジェクトの構成]ウィンドウで、新しいプロジェクトの名前と場所を指定します。
  6. [作成]をクリックします。

これにより、Visual Studio2019で新しい.NETCoreコンソールアプリケーションプロジェクトが作成されます。このプロジェクトを使用して、この記事の後続のセクションでデータ注釈を操作します。

システムを含めます。ComponentModel。DataAnnotations名前空間

この記事に記載されているコードサンプルを使用するには、システムを含める必要があります。ComponentModel。プログラムのDataAnnotations名前空間。

属性は、クラスまたはプロパティのメタデータを指定するために使用されることに注意してください。データ注釈属性は、大きく次のように分類できます。

  • 検証属性—エンティティのプロパティに検証ルールを適用するために使用されます
  • 表示属性—ユーザーインターフェイスでのデータの表示方法を指定するために使用されます
  • モデリング属性—クラス間に存在する関係を指定するために使用されます

C#のデータアノテーション属性クラス

System.ComponentModel.Annotations名前空間は、エンティティクラスまたはデータコントロールのメタデータを定義するために使用できるいくつかの属性クラスで構成されています。最も一般的に使用される属性は次のとおりです。

  • ConcurrencyCheck
  • キー
  • MaxLength
  • 必須
  • StringLength
  • タイムスタンプ

C#でのデータ注釈の例

前に作成したコンソールアプリケーションのAuthor.csという名前のファイルに次のクラスを作成します。

パブリッククラス作成者

    {{

        [必須(ErrorMessage = "{0}が必要です")]

        [StringLength(50、MinimumLength = 3、

        ErrorMessage = "名は最小3文字、最大50文字である必要があります")]

        [DataType(DataType.Text)]

        public string FirstName {get; セットする; }

        [必須(ErrorMessage = "{0}が必要です")]

        [StringLength(50、MinimumLength = 3、

        ErrorMessage = "姓は最小3文字、最大50文字である必要があります")]

        [DataType(DataType.Text)]

        パブリック文字列LastName {get; セットする; }

        [DataType(DataType.PhoneNumber)]

        [電話]

        パブリック文字列PhoneNumber {get; セットする; }

        [DataType(DataType.EmailAddress)]

        [電子メールアドレス]

        パブリック文字列Eメール{取得; セットする; }

    }

次のコードスニペットは、Authorクラスのインスタンスを作成し、そのプロパティに値を割り当てる方法を示しています。

著者author = new Author();

author.FirstName = "Joydip";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

Program.csファイルのMainメソッドに次のコードスニペットを記述して、モデルを検証できます。

ValidationContext context = new ValidationContext(author、null、null);

リストvalidationResults = new List();

bool valid = Validator.TryValidateObject(author、context、validationResults、true);

if(!valid)

{{

  foreach(validationResultsのValidationResultvalidationResult)

  {{

       Console.WriteLine( "{0}"、validationResult.ErrorMessage);

  }

}

ValidationContextは、検証を実行する必要があるコンテキストを提供するクラスです。ValidatorクラスのTryValidateObject静的メソッドは、検証が成功した場合はtrueを返し、それ以外の場合はfalseを返します。また、モデルで失敗したすべての検証の詳細を示すValidationResultsのリストを返します。最後に、foreachループを使用して、ValidationResultsのリストを繰り返し、コンソールウィンドウにエラーメッセージを表示しました。

参考までに、完全なコードリストを以下に示します。

パブリッククラス作成者

    {{

        [必須(ErrorMessage = "{0}が必要です")]

        [StringLength(50、MinimumLength = 3、

        ErrorMessage = "名は最小3文字、最大50文字である必要があります")]

        [DataType(DataType.Text)]

        public string FirstName {get; セットする; }

        [必須(ErrorMessage = "{0}が必要です")]

        [StringLength(50、MinimumLength = 3、

        ErrorMessage = "姓は最小3文字、最大50文字である必要があります")]

        [DataType(DataType.Text)]

        パブリック文字列LastName {get; セットする; }

        [DataType(DataType.PhoneNumber)]

        [電話]

        パブリック文字列PhoneNumber {get; セットする; }

        [DataType(DataType.EmailAddress)]

        [電子メールアドレス]

        パブリック文字列Eメール{取得; セットする; }

    }

    クラスプログラム

    {{      

        static void Main(string [] args)

        {{

            著者author = new Author();

            author.FirstName = "Joydip";

            author.LastName = ""; //値が入力されていません

            author.PhoneNumber = "1234567890";

            author.Email = "[email protected]";

            ValidationContextコンテキスト=新しいValidationContext

            (作成者、null、null);

            リストvalidationResults = new

            リスト();

            bool valid = Validator.TryValidateObject

            (作成者、コンテキスト、validationResults、true);

            if(!valid)

            {{

                foreach(ValidationResultvalidationResult in

                検証結果)

                {{

                    Console.WriteLine( "{0}"、

                    validateResult.ErrorMessage);

                }

            }

            Console.ReadKey();

        }

    }

プログラムを実行すると、コンソールウィンドウに次のエラーメッセージが表示されます。

LastNameが必要です

C#でカスタム検証属性を作成します

カスタム検証属性クラスを作成するには、以下に示すコードスニペットに示すように、ValidationAttribute基本クラスを拡張し、IsValidメソッドをオーバーライドする必要があります。

[AttributeUsage(AttributeTargets.Property、AllowMultiple = false、AliExpress = false)]

パブリッククラスIsEmptyAttribute:ValidationAttribute

 {{

    public override bool IsValid(object value)

     {{

         var inputValue =文字列としての値;

         戻り値!string.IsNullOrEmpty(inputValue);

     }

 }

次のコードスニペットは、カスタム属性を使用して、AuthorクラスのFirstNameプロパティとLastNameプロパティを装飾する方法を示しています。

[IsEmpty(ErrorMessage = "nullまたは空であってはなりません。")]

public string FirstName {get; セットする; }

[IsEmpty(ErrorMessage = "nullまたは空であってはなりません。")]

パブリック文字列LastName {get; セットする; }

データ注釈は、システムの一部として.NET3.5で最初に導入されました。ComponentModel。DataAnnotations名前空間。それ以来、それらは.NETで広く使用される機能になりました。データ注釈を利用して、データ検証ルールを1か所で定義できるため、同じ検証コードを何度も書き直す必要がなくなります。

ここでの将来の投稿では、ASP.NET CoreMVCアプリケーションでデータ注釈を使用してモデル検証を実行する方法について説明します。

C#でより多くのことを行う方法

  • C#で抽象クラスとインターフェイスを使用する場合
  • C#でAutoMapperを操作する方法
  • C#でラムダ式を使用する方法
  • C#でAction、Func、およびPredicateデリゲートを操作する方法
  • C#でデリゲートを操作する方法
  • C#で簡単なロガーを実装する方法
  • C#で属性を操作する方法
  • C#でlog4netを操作する方法
  • C#でリポジトリデザインパターンを実装する方法
  • C#でリフレクションを操作する方法
  • C#でfilesystemwatcherを操作する方法
  • C#でレイジー初期化を実行する方法
  • C#でMSMQを操作する方法
  • C#で拡張メソッドを操作する方法
  • C#でラムダ式を使用する方法
  • C#でvolatileキーワードを使用する場合
  • C#でyieldキーワードを使用する方法
  • C#でポリモーフィズムを実装する方法
  • C#で独自のタスクスケジューラを構築する方法
  • C#でRabbitMQを操作する方法
  • C#でタプルを操作する方法
  • C#での仮想メソッドと抽象メソッドの調査