Cómo usar anotaciones de datos en C #

Las anotaciones de datos (disponibles como parte del espacio de nombres System. ComponentModel. DataAnnotations) son atributos que se pueden aplicar a clases o miembros de clase para especificar la relación entre clases, describir cómo se mostrarán los datos en la interfaz de usuario y especificar reglas de validación. Este artículo habla sobre las anotaciones de datos, por qué son útiles y cómo usarlas en nuestras aplicaciones .NET Core.

Para trabajar con los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2019 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2019 aquí. 

Crear un proyecto de aplicación de consola en Visual Studio 2019

En primer lugar, creemos un proyecto de aplicación de consola .NET Core en Visual Studio. Suponiendo que Visual Studio 2019 esté instalado en su sistema, siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core en Visual Studio.

  1. Inicie el IDE de Visual Studio.
  2. Haga clic en "Crear nuevo proyecto".
  3. En la ventana "Crear nuevo proyecto", seleccione "Aplicación de consola (.NET Core)" en la lista de plantillas que se muestran.
  4. Haga clic en Siguiente. 
  5. En la ventana "Configure su nuevo proyecto" que se muestra a continuación, especifique el nombre y la ubicación del nuevo proyecto.
  6. Haga clic en Crear.

Esto creará un nuevo proyecto de aplicación de consola .NET Core en Visual Studio 2019. Usaremos este proyecto para trabajar con anotaciones de datos en las secciones siguientes de este artículo.

Incluya el System. ComponentModel. Espacio de nombres DataAnnotations

Para trabajar con los ejemplos de código que se proporcionan en este artículo, debe incluir System. ComponentModel. Espacio de nombres DataAnnotations en su programa.

Tenga en cuenta que los atributos se utilizan para especificar metadatos en una clase o propiedad. Los atributos de anotación de datos se pueden clasificar en términos generales en los siguientes:

  • Atributo de validación: se utiliza para hacer cumplir las reglas de validación en las propiedades de las entidades.
  • Atributo de visualización: se utiliza para especificar cómo se deben mostrar los datos en la interfaz de usuario.
  • Atributo de modelado: se utiliza para especificar la relación que existe entre clases.

Clases de atributos de anotaciones de datos en C #

El espacio de nombres System.ComponentModel.Annotations comprende varias clases de atributos que se pueden usar para definir metadatos para sus clases de entidad o controles de datos. Los atributos más utilizados incluyen los siguientes:

  • ConcurrencyCheck
  • Llave
  • Longitud máxima
  • Necesario
  • Longitud de la cuerda
  • Marca de tiempo

Ejemplo de anotaciones de datos en C #

Cree la siguiente clase en un archivo llamado Author.cs en la aplicación de consola que creamos anteriormente.

Autor de clase pública

    {

        [Obligatorio (ErrorMessage = "{0} es obligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "El nombre debe tener un mínimo de 3 caracteres y un máximo de 50 caracteres")]

        [DataType (DataType.Text)]

        cadena pública FirstName {get; conjunto; }

        [Obligatorio (ErrorMessage = "{0} es obligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "El apellido debe tener un mínimo de 3 caracteres y un máximo de 50 caracteres")]

        [DataType (DataType.Text)]

        cadena pública LastName {get; conjunto; }

        [DataType (DataType.PhoneNumber)]

        [Teléfono]

        cadena pública PhoneNumber {get; conjunto; }

        [DataType (DataType.EmailAddress)]

        [Dirección de correo electrónico]

        cadena pública Correo electrónico {get; conjunto; }

    }

El siguiente fragmento de código ilustra cómo puede crear una instancia de la clase Author y asignar valores a sus propiedades.

Autor autor = nuevo Autor ();

author.FirstName = "Joydip";

author.LastName = "";

author.PhoneNumber = "1234567890";

author.Email = "[email protected]";

Puede escribir el siguiente fragmento de código en el método Main del archivo Program.cs para validar su modelo.

ValidationContext context = new ValidationContext (autor, nulo, nulo);

List validationResults = new List ();

bool valid = Validator.TryValidateObject (autor, contexto, validationResults, true);

si (! válido)

{

  foreach (ValidationResult validationResult en validationResults)

  {

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

  }

}

ValidationContext es la clase que le proporciona el contexto donde se debe realizar la validación. El método estático TryValidateObject de la clase Validator devuelve verdadero si la validación es exitosa, falso en caso contrario. También devuelve una lista de ValidationResults que detalla todas las validaciones que han fallado en el modelo. Finalmente, usamos un bucle foreach para iterar la lista de ValidationResults y mostrar los mensajes de error en la ventana de la consola.

La lista completa de códigos se proporciona a continuación para su referencia.

Autor de clase pública

    {

        [Obligatorio (ErrorMessage = "{0} es obligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "El nombre debe tener un mínimo de 3 caracteres y un máximo de 50 caracteres")]

        [DataType (DataType.Text)]

        cadena pública FirstName {get; conjunto; }

        [Obligatorio (ErrorMessage = "{0} es obligatorio")]

        [StringLength (50, MinimumLength = 3,

        ErrorMessage = "El apellido debe tener un mínimo de 3 caracteres y un máximo de 50 caracteres")]

        [DataType (DataType.Text)]

        cadena pública LastName {get; conjunto; }

        [DataType (DataType.PhoneNumber)]

        [Teléfono]

        cadena pública PhoneNumber {get; conjunto; }

        [DataType (DataType.EmailAddress)]

        [Dirección de correo electrónico]

        cadena pública Correo electrónico {get; conjunto; }

    }

    programa de clase

    {      

        static void Main (cadena [] argumentos)

        {

            Autor autor = nuevo Autor ();

            author.FirstName = "Joydip";

            author.LastName = ""; // No se ingresó ningún valor

            author.PhoneNumber = "1234567890";

            author.Email = "[email protected]";

            ValidationContext context = nuevo ValidationContext

            (autor, nulo, nulo);

            List validationResults = nuevo

            Lista();

            bool valid = Validator.TryValidateObject

            (autor, contexto, validationResults, verdadero);

            si (! válido)

            {

                foreach (ValidationResult validationResult en

                validationResults)

                {

                    Console.WriteLine ("{0}",

                    validationResult.ErrorMessage);

                }

            }

            Console.ReadKey ();

        }

    }

Cuando ejecute el programa, debería ver el siguiente mensaje de error en la ventana de la consola:

Apellido es obligatorio

Cree un atributo de validación personalizado en C #

Para crear una clase de atributo de validación personalizada, debe extender la clase base ValidationAttribute y anular el método IsValid como se muestra en el fragmento de código que se proporciona a continuación.

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

clase pública IsEmptyAttribute: ValidationAttribute

 {

    public override bool IsValid (valor del objeto)

     {

         var inputValue = valor como cadena;

         return! string.IsNullOrEmpty (inputValue);

     }

 }

El siguiente fragmento de código ilustra cómo puede utilizar el atributo personalizado para decorar las propiedades FirstName y LastName de la clase Author.

[IsEmpty (ErrorMessage = "No debe ser nulo ni estar vacío")]

cadena pública FirstName {get; conjunto; }

[IsEmpty (ErrorMessage = "No debe ser nulo ni estar vacío")]

cadena pública LastName {get; conjunto; }

Las anotaciones de datos se introdujeron inicialmente en .NET 3.5 como parte del Sistema. ComponentModel. Espacio de nombres DataAnnotations. Desde entonces, se han convertido en una característica ampliamente utilizada en .NET. Puede aprovechar las anotaciones de datos para definir reglas de validación de datos en un solo lugar y así evitar tener que volver a escribir el mismo código de validación una y otra vez.

En una publicación futura aquí, veremos cómo se puede usar la anotación de datos en aplicaciones ASP.NET Core MVC para realizar la validación del modelo.

Cómo hacer más en C #

  • Cuándo usar una clase abstracta frente a una interfaz en C #
  • Cómo trabajar con AutoMapper en C #
  • Cómo usar expresiones lambda en C #
  • Cómo trabajar con delegados Action, Func y Predicate en C #
  • Cómo trabajar con delegados en C #
  • Cómo implementar un registrador simple en C #
  • Cómo trabajar con atributos en C #
  • Cómo trabajar con log4net en C #
  • Cómo implementar el patrón de diseño del repositorio en C #
  • Cómo trabajar con la reflexión en C #
  • Cómo trabajar con filesystemwatcher en C #
  • Cómo realizar la inicialización diferida en C #
  • Cómo trabajar con MSMQ en C #
  • Cómo trabajar con métodos de extensión en C #
  • Cómo usar expresiones lambda en C #
  • Cuándo usar la palabra clave volátil en C #
  • Cómo usar la palabra clave yield en C #
  • Cómo implementar polimorfismo en C #
  • Cómo construir su propio programador de tareas en C #
  • Cómo trabajar con RabbitMQ en C #
  • Cómo trabajar con una tupla en C #
  • Explorando métodos virtuales y abstractos en C #