[EntLib 5.0 Validation Block] Validación encadenada de entidades

Una de las cosas que nos ofrece el Validation Block es la posibilidad de validar entidades que a su vez tienen entidades con validaciones que a su vez… vamos una validación encadenada y que es facilmente configurable a través de los siguientes atributos:

  • ObjectValidator –> Una entidad
  • ObjectValidatorCollection –> Una colección de entidades

Y como no, lo mejor es ver un ejemplo sencillo:

namespace ConsoleApplicationValidation
{
    class Order
    {
        public Guid Id { get; set; }
        [ObjectCollectionValidator]
        public List<OrderDetail> OrderDetails { get; set; }
    }
 
    class OrderDetail
    {
        public Guid Id { get; set; }
        [StringLengthValidator(1,100)]
        public string Description { get; set; }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Order order = new Order
            {
                OrderDetails = new List<OrderDetail>
                {
                    new OrderDetail{
                        Id = Guid.NewGuid()
                    }
                }
            };
 
            Validator validator = ValidationFactory.CreateValidator<Order>();
            ValidationResults results = validator.Validate(order);
 
            Console.WriteLine(results.Count > 0 ? "Not Valid" : "Valid");
            Console.Read();
        }
    }
}

Lo ejecutamos:

image

Para que sea válida la entidad Order, nuestras entidades OrderDetail deben tener una descripción con longitud comprendida entre 1 y 100:

Order order = new Order
{
    OrderDetails = new List<OrderDetail>
    {
        new OrderDetail{
            Id = Guid.NewGuid(),
            Description = "OrderDetail1"
        }
    }
};

image

Intentaré escribir algún artículo con validaciones más complejas :)

Un saludo

Published 2/6/2010 17:50 por Luis Ruiz Pavón
Comparte este post:
http://geeks.ms/blogs/lruiz/archive/2010/06/02/entlib-5-0-validation-block-validaci-243-n-encadenada-de-entidades.aspx