Come usare le annotazioni dei dati in C #

Le annotazioni dei dati (disponibili come parte dello spazio dei nomi System. ComponentModel. DataAnnotations) sono attributi che possono essere applicati alle classi o ai membri della classe per specificare la relazione tra le classi, descrivere come i dati devono essere visualizzati nell'interfaccia utente e specificare le regole di convalida. Questo articolo parla delle annotazioni dei dati, del motivo per cui sono utili e di come usarle nelle nostre applicazioni .NET Core.

Per lavorare con gli esempi di codice forniti in questo articolo, dovresti avere Visual Studio 2019 installato nel tuo sistema. Se non hai già una copia, puoi scaricare Visual Studio 2019 qui. 

Creare un progetto di applicazione console in Visual Studio 2019

Prima di tutto, creiamo un progetto di applicazione console .NET Core in Visual Studio. Supponendo che Visual Studio 2019 sia installato nel sistema, seguire i passaggi descritti di seguito per creare un nuovo progetto di applicazione console .NET Core in Visual Studio.

  1. Avvia l'IDE di Visual Studio.
  2. Fai clic su "Crea nuovo progetto".
  3. Nella finestra "Crea nuovo progetto", seleziona "App Console (.NET Core)" dall'elenco dei modelli visualizzati.
  4. Fare clic su Avanti. 
  5. Nella finestra "Configura il tuo nuovo progetto" mostrata di seguito, specifica il nome e la posizione per il nuovo progetto.
  6. Fare clic su Crea.

Questo creerà un nuovo progetto di applicazione console .NET Core in Visual Studio 2019. Useremo questo progetto per lavorare con le annotazioni dei dati nelle sezioni successive di questo articolo.

Includi il sistema. ComponentModel. DataAnnotations spazio dei nomi

Per lavorare con gli esempi di codice forniti in questo articolo, è necessario includere System. ComponentModel. DataAnnotations spazio dei nomi nel programma.

Notare che gli attributi vengono utilizzati per specificare i metadati su una classe o una proprietà. Gli attributi di annotazione dei dati possono essere classificati in linea di massima come segue:

  • Attributo di convalida: utilizzato per applicare le regole di convalida sulle proprietà delle entità
  • Attributo di visualizzazione: utilizzato per specificare come devono essere visualizzati i dati nell'interfaccia utente
  • Attributo di modellazione: utilizzato per specificare la relazione esistente tra le classi

Classi di attributi delle annotazioni dei dati in C #

Lo spazio dei nomi System.ComponentModel.Annotations comprende diverse classi di attributi che possono essere utilizzate per definire i metadati per le classi di entità o i controlli dati. Gli attributi più comunemente usati includono quanto segue:

  • ConcurrencyCheck
  • Chiave
  • Lunghezza massima
  • necessario
  • StringLength
  • Timestamp

Esempio di annotazioni dei dati in C #

Crea la seguente classe in un file denominato Author.cs nell'applicazione console che abbiamo creato in precedenza.

public class Autore

    {

        [Obbligatorio (ErrorMessage = "{0} è obbligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Il nome deve contenere un minimo di 3 caratteri e un massimo di 50 caratteri")]

        [DataType (DataType.Text)]

        stringa pubblica FirstName {get; impostato; }

        [Obbligatorio (ErrorMessage = "{0} è obbligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Il cognome deve contenere un minimo di 3 caratteri e un massimo di 50 caratteri")]

        [DataType (DataType.Text)]

        stringa pubblica LastName {get; impostato; }

        [DataType (DataType.PhoneNumber)]

        [Telefono]

        stringa pubblica PhoneNumber {get; impostato; }

        [DataType (DataType.EmailAddress)]

        [Indirizzo email]

        stringa pubblica Email {get; impostato; }

    }

Il frammento di codice seguente illustra come creare un'istanza della classe Author e assegnare valori alle sue proprietà.

Autore autore = nuovo autore ();

author.FirstName = "Joydip";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

È possibile scrivere il seguente frammento di codice nel metodo Main del file Program.cs per convalidare il modello.

Contesto ValidationContext = new ValidationContext (autore, null, null);

List validationResults = new List ();

bool valido = Validator.TryValidateObject (autore, contesto, validationResults, true);

se (! valido)

{

  foreach (ValidationResult validationResult in validationResults)

  {

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

  }

}

ValidationContext è la classe che fornisce il contesto in cui deve essere eseguita la convalida. Il metodo statico TryValidateObject della classe Validator restituisce true se la convalida ha esito positivo, false in caso contrario. Restituisce inoltre un elenco di ValidationResults che riporta in dettaglio tutte le convalide che hanno avuto esito negativo sul modello. Infine, abbiamo utilizzato un ciclo foreach per iterare l'elenco di ValidationResults e visualizzare i messaggi di errore nella finestra della console.

L'elenco completo del codice è fornito di seguito come riferimento.

public class Autore

    {

        [Obbligatorio (ErrorMessage = "{0} è obbligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Il nome deve contenere un minimo di 3 caratteri e un massimo di 50 caratteri")]

        [DataType (DataType.Text)]

        stringa pubblica FirstName {get; impostato; }

        [Obbligatorio (ErrorMessage = "{0} è obbligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "Il cognome deve contenere un minimo di 3 caratteri e un massimo di 50 caratteri")]

        [DataType (DataType.Text)]

        stringa pubblica LastName {get; impostato; }

        [DataType (DataType.PhoneNumber)]

        [Telefono]

        stringa pubblica PhoneNumber {get; impostato; }

        [DataType (DataType.EmailAddress)]

        [Indirizzo email]

        stringa pubblica Email {get; impostato; }

    }

    programma di classe

    {      

        static void Main (string [] args)

        {

            Autore autore = nuovo autore ();

            author.FirstName = "Joydip";

            author.LastName = ""; // Nessun valore inserito

            author.PhoneNumber = "1234567890";

            author.Email = "[email protected]";

            Contesto ValidationContext = new ValidationContext

            (autore, null, null);

            List validationResults = nuovo

            Elenco();

            bool valido = Validator.TryValidateObject

            (autore, contesto, validationResults, true);

            se (! valido)

            {

                foreach (ValidationResult validationResult in

                validationResults)

                {

                    Console.WriteLine ("{0}",

                    validationResult.ErrorMessage);

                }

            }

            Console.ReadKey ();

        }

    }

Quando esegui il programma, dovresti vedere il seguente messaggio di errore visualizzato nella finestra della console:

LastName è obbligatorio

Creare un attributo di convalida personalizzato in C #

Per creare una classe di attributi di convalida personalizzata, è necessario estendere la classe di base ValidationAttribute e sovrascrivere il metodo IsValid come mostrato nello snippet di codice riportato di seguito.

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

classe pubblica IsEmptyAttribute: ValidationAttribute

 {

    public override bool IsValid (valore oggetto)

     {

         var inputValue = valore come stringa;

         return! string.IsNullOrEmpty (inputValue);

     }

 }

Il frammento di codice seguente illustra come utilizzare l'attributo personalizzato per decorare le proprietà FirstName e LastName della classe Author.

[IsEmpty (ErrorMessage = "Non dovrebbe essere nullo o vuoto.")]

stringa pubblica FirstName {get; impostato; }

[IsEmpty (ErrorMessage = "Non dovrebbe essere nullo o vuoto.")]

stringa pubblica LastName {get; impostato; }

Le annotazioni dei dati sono state introdotte inizialmente in .NET 3.5 come parte del System. ComponentModel. DataAnnotations spazio dei nomi. Da allora sono diventati una funzionalità ampiamente utilizzata in .NET. È possibile sfruttare le annotazioni dei dati per definire le regole di convalida dei dati in un unico punto e quindi evitare di dover riscrivere lo stesso codice di convalida ancora e ancora.

In un post futuro qui, vedremo come utilizzare l'annotazione dei dati nelle applicazioni ASP.NET Core MVC per eseguire la convalida del modello.

Come fare di più in C #

  • Quando usare una classe astratta e un'interfaccia in C #
  • Come lavorare con AutoMapper in C #
  • Come usare le espressioni lambda in C #
  • Come lavorare con i delegati Action, Func e Predicate in C #
  • Come lavorare con i delegati in C #
  • Come implementare un semplice logger in C #
  • Come lavorare con gli attributi in C #
  • Come lavorare con log4net in C #
  • Come implementare il modello di progettazione del repository in C #
  • Come lavorare con la riflessione in C #
  • Come lavorare con Filesystemwatcher in C #
  • Come eseguire l'inizializzazione pigra in C #
  • Come lavorare con MSMQ in C #
  • Come lavorare con i metodi di estensione in C #
  • Come utilizzare espressioni lambda in C #
  • Quando usare la parola chiave volatile in C #
  • Come utilizzare la parola chiave yield in C #
  • Come implementare il polimorfismo in C #
  • Come creare il proprio pianificatore di attività in C #
  • Come lavorare con RabbitMQ in C #
  • Come lavorare con una tupla in C #
  • Esplorazione di metodi virtuali e astratti in C #