5.5.3 Alternativa para validar reglas con ef core
Existe otra manera más fácil para realizar validaciones personalizadas a nuestras tablas utilizando las clases proporcionadas por .NET
Puedes crear tus reglas personalizadas creando una clase que herede de la clase ValidationAttribute e implementar el método IsValid esta función recibe 2 parámetros un objeto llamado value que contiene el valor del campo que queremos validar y un objeto validationContext que nos sirve para manejar la validación de la regla.
Agregamos un índice único a nuestra tabla producto, en nuestra carpeta Models luego Entity Configurations luego nuestro archivo ProductoConfiguration.cs
public class ProductoConfiguration
: IEntityTypeConfiguration<Producto>
{
public void Configure(EntityTypeBuilder<Producto> builder)
{
//Código indice para el nombre en producto
builder.HasIndex(e => e.Nombre)
.IsUnique()
.HasName("UX_ProductoNombre");
}
}Creamos la migración y actualizamos nuestra base de datos
En nuestra clase productoDAO agregamos una función para validar que el nombre del producto no se repita, recibe como parámetros el Id del producto y el nombre del producto
public bool EsNombreRepetido(int id, string nombre)
{
var registroRepetido = contexto.Producto
.FirstOrDefault(c => c.Nombre == nombre
&& c.Id != id);
if (registroRepetido != null)
{
customError = new CustomError(400, String.Format(
this.localizacion.GetLocalizedHtmlString("Repeteaded"),
"Producto", "nombre"), "Nombre");
return true;
}
return false;
}En nuestra carpeta Rules > Producto creamos una nueva clase NombreValidation.cs que hereda de la clase ValidationAttribute y sobrescribimos el método ValidationResult
Quitamos el código para validar el nombre de nuestra clase ProductoDAO
A nuestra clase Producto.cs le agregamos la validación
Esta forma es más sencilla que la anterior. Como ejercicio puedes agregar la validación para la clave repetida.
Puedes pasar como parámetro el nombre de algún campo adicional que necesites, por ejemplo
Ejercicio de práctica
Agrega un índice y la validación para el campo clave, puedes comparar tu solución con mi código en github.
Last updated
Was this helpful?