Comment utiliser les annotations de données en C #

Les annotations de données (disponibles dans le cadre de l'espace de noms System. ComponentModel. DataAnnotations) sont des attributs qui peuvent être appliqués aux classes ou aux membres de classe pour spécifier la relation entre les classes, décrire comment les données doivent être affichées dans l'interface utilisateur et spécifier des règles de validation. Cet article traite des annotations de données, de leur utilité et de leur utilisation dans nos applications .NET Core.

Pour utiliser les exemples de code fournis dans cet article, vous devez disposer de Visual Studio 2019 installé sur votre système. Si vous n'en avez pas déjà une copie, vous pouvez télécharger Visual Studio 2019 ici. 

Créer un projet d'application console dans Visual Studio 2019

Tout d'abord, créons un projet d'application de console .NET Core dans Visual Studio. En supposant que Visual Studio 2019 est installé sur votre système, suivez les étapes décrites ci-dessous pour créer un nouveau projet d'application console .NET Core dans Visual Studio.

  1. Lancez l'IDE de Visual Studio.
  2. Cliquez sur "Créer un nouveau projet".
  3. Dans la fenêtre «Créer un nouveau projet», sélectionnez «Application console (.NET Core)» dans la liste des modèles affichés.
  4. Cliquez sur Suivant. 
  5. Dans la fenêtre «Configurer votre nouveau projet» ci-dessous, spécifiez le nom et l'emplacement du nouveau projet.
  6. Cliquez sur Créer.

Cela créera un nouveau projet d'application console .NET Core dans Visual Studio 2019. Nous utiliserons ce projet pour travailler avec les annotations de données dans les sections suivantes de cet article.

Incluez le système. ComponentModel. Espace de noms DataAnnotations

Pour travailler avec les exemples de code donnés dans cet article, vous devez inclure le System. ComponentModel. Espace de noms DataAnnotations dans votre programme.

Notez que les attributs sont utilisés pour spécifier des métadonnées sur une classe ou une propriété. Les attributs d'annotation de données peuvent être globalement classés comme suit:

  • Attribut de validation - Utilisé pour appliquer des règles de validation sur les propriétés des entités
  • Attribut d'affichage - Utilisé pour spécifier la manière dont les données doivent être affichées dans l'interface utilisateur
  • Attribut de modélisation - Utilisé pour spécifier la relation qui existe entre les classes

Classes d'attributs d'annotations de données en C #

L'espace de noms System.ComponentModel.Annotations comprend plusieurs classes d'attributs qui peuvent être utilisées pour définir des métadonnées pour vos classes d'entités ou vos contrôles de données. Les attributs les plus couramment utilisés sont les suivants:

  • Vérification de la concurrence
  • Clé
  • Longueur maximale
  • Obligatoire
  • Longueur de chaine
  • Horodatage

Exemple d'annotations de données en C #

Créez la classe suivante dans un fichier nommé Author.cs dans l'application console que nous avons créée précédemment.

public class Auteur

    {

        [Obligatoire (ErrorMessage = "{0} est obligatoire")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Le prénom doit comporter au minimum 3 caractères et au maximum 50 caractères")]

        [DataType (DataType.Text)]

        chaîne publique FirstName {get; ensemble; }

        [Obligatoire (ErrorMessage = "{0} est obligatoire")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Le nom de famille doit comporter au minimum 3 caractères et au maximum 50 caractères")]

        [DataType (DataType.Text)]

        chaîne publique LastName {get; ensemble; }

        [DataType (DataType.PhoneNumber)]

        [Téléphone]

        chaîne publique PhoneNumber {get; ensemble; }

        [DataType (DataType.EmailAddress)]

        [Adresse e-mail]

        public string Email {get; ensemble; }

    }

L'extrait de code suivant illustre comment créer une instance de la classe Author et attribuer des valeurs à ses propriétés.

Auteur auteur = nouvel auteur ();

author.FirstName = "Joydip";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

Vous pouvez écrire l'extrait de code suivant dans la méthode Main du fichier Program.cs pour valider votre modèle.

ValidationContext context = new ValidationContext (auteur, null, null);

Liste validationResults = new List ();

bool valid = Validator.TryValidateObject (auteur, contexte, validationResults, true);

si (! valide)

{

  foreach (ValidationResult validationResult in validationResults)

  {

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

  }

}

ValidationContext est la classe qui vous fournit le contexte dans lequel la validation doit être effectuée. La méthode statique TryValidateObject de la classe Validator renvoie true si la validation réussit, false dans le cas contraire. Il renvoie également une liste de ValidationResults qui détaille toutes les validations qui ont échoué sur le modèle. Enfin, nous avons utilisé une boucle foreach pour parcourir la liste des ValidationResults et afficher les messages d'erreur dans la fenêtre de la console.

La liste complète des codes est donnée ci-dessous pour votre référence.

public class Auteur

    {

        [Obligatoire (ErrorMessage = "{0} est obligatoire")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Le prénom doit comporter au minimum 3 caractères et au maximum 50 caractères")]

        [DataType (DataType.Text)]

        chaîne publique FirstName {get; ensemble; }

        [Obligatoire (ErrorMessage = "{0} est obligatoire")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Le nom de famille doit comporter au minimum 3 caractères et au maximum 50 caractères")]

        [DataType (DataType.Text)]

        chaîne publique LastName {get; ensemble; }

        [DataType (DataType.PhoneNumber)]

        [Téléphone]

        chaîne publique PhoneNumber {get; ensemble; }

        [DataType (DataType.EmailAddress)]

        [Adresse e-mail]

        public string Email {get; ensemble; }

    }

    programme de classe

    {      

        static void Main (string [] args)

        {

            Auteur auteur = nouvel auteur ();

            author.FirstName = "Joydip";

            author.LastName = ""; // Aucune valeur saisie

            author.PhoneNumber = "1234567890";

            author.Email = "[email protected]";

            ValidationContext context = nouveau ValidationContext

            (auteur, nul, nul);

            Liste validationResults = nouveau

            Liste();

            booléen valide = Validator.TryValidateObject

            (auteur, contexte, validationResults, true);

            si (! valide)

            {

                foreach (ValidationResult validationResult in

                validationResults)

                {

                    Console.WriteLine ("{0}",

                    validationResult.ErrorMessage);

                }

            }

            Console.ReadKey ();

        }

    }

Lorsque vous exécutez le programme, vous devriez voir le message d'erreur suivant affiché dans la fenêtre de la console:

Le nom est obligatoire

Créer un attribut de validation personnalisé en C #

Pour créer une classe d'attributs de validation personnalisée, vous devez étendre la classe de base ValidationAttribute et remplacer la méthode IsValid comme indiqué dans l'extrait de code ci-dessous.

[AttributeUsage (AttributeTargets.Property, AllowMultiple = false, Inherited = false)]

classe publique IsEmptyAttribute: ValidationAttribute

 {

    public override bool IsValid (valeur d'objet)

     {

         var inputValue = valeur sous forme de chaîne;

         return! string.IsNullOrEmpty (inputValue);

     }

 }

L'extrait de code suivant illustre comment vous pouvez utiliser l'attribut personnalisé pour décorer les propriétés FirstName et LastName de la classe Author.

[IsEmpty (ErrorMessage = "Ne doit pas être nul ou vide.")]

chaîne publique FirstName {get; ensemble; }

[IsEmpty (ErrorMessage = "Ne doit pas être nul ou vide.")]

chaîne publique LastName {get; ensemble; }

Les annotations de données ont été introduites initialement dans .NET 3.5 dans le cadre du système. ComponentModel. Espace de noms DataAnnotations. Depuis lors, ils sont devenus une fonctionnalité largement utilisée dans .NET. Vous pouvez profiter des annotations de données pour définir les règles de validation des données en un seul endroit et ainsi éviter d'avoir à réécrire le même code de validation encore et encore.

Dans un prochain article, nous verrons comment l'annotation de données peut être utilisée dans les applications ASP.NET Core MVC pour effectuer la validation de modèle.

Comment faire plus en C #

  • Quand utiliser une classe abstraite ou une interface en C #
  • Comment travailler avec AutoMapper en C #
  • Comment utiliser les expressions lambda en C #
  • Comment travailler avec les délégués Action, Func et Predicate en C #
  • Comment travailler avec des délégués en C #
  • Comment implémenter un simple logger en C #
  • Comment travailler avec des attributs en C #
  • Comment travailler avec log4net en C #
  • Comment implémenter le modèle de conception de référentiel en C #
  • Comment travailler avec la réflexion en C #
  • Comment travailler avec Filesystemwatcher en C #
  • Comment effectuer une initialisation différée en C #
  • Comment travailler avec MSMQ en C #
  • Comment travailler avec des méthodes d'extension en C #
  • Comment utiliser les expressions lambda en C #
  • Quand utiliser le mot clé volatile en C #
  • Comment utiliser le mot clé yield en C #
  • Comment implémenter le polymorphisme en C #
  • Comment créer votre propre planificateur de tâches en C #
  • Comment travailler avec RabbitMQ en C #
  • Comment travailler avec un tuple en C #
  • Explorer les méthodes virtuelles et abstraites en C #