Al regenerar el modelo desde la base de datos en Entity Framework, las anotaciones de validación previamente aplicadas se pierden. Para evitarlo, se recomienda usar clases parciales junto con metadatos separados.
Primero, crea un archivo ValidacionDinamica.cs en la carpeta Models. Copia la estructura de propiedades del modelo autogenerado (por ejemplo, desde xxxx.tt) y aplica atributos de validación personalizados. Ejemplo:
using System;
using System.ComponentModel.DataAnnotations;
namespace ArchivoDigital.Models
{
public class ReglasValidacionDato
{
[Required(ErrorMessage = "Campo obligatorio")]
[StringLength(10, ErrorMessage = "Máximo 10 caracteres")]
[Display(Name = "Tipo de Documento")]
public string TipoDocumento { get; set; }
[Required(ErrorMessage = "Campo obligatorio")]
[StringLength(100)]
[Display(Name = "Título del Archivo")]
public string Titulo { get; set; }
[Required]
[Range(1, 500, ErrorMessage = "Páginas entre 1 y 500")]
[Display(Name = "Número de Páginas")]
public int Paginas { get; set; }
[Required]
[Range(0, 50)]
[Display(Name = "Copias Originales")]
public int CopiasOriginales { get; set; }
[Required]
[Range(0, 50)]
[Display(Name = "Copias Adicionales")]
public int CopiasAdicionales { get; set; }
[Required]
[StringLength(20)]
[Display(Name = "Responsable")]
public string ResponsableIngreso { get; set; }
[Required]
[Display(Name = "Fecha de Ingreso")]
public DateTime FechaIngreso { get; set; }
[Required]
[StringLength(10)]
[Display(Name = "Gabinete")]
public string Gabinete { get; set; }
[Required]
[StringLength(10)]
[Display(Name = "Caja")]
public string Caja { get; set; }
[Required]
[StringLength(10)]
[Display(Name = "Bolsa")]
public string Bolsa { get; set; }
[StringLength(255)]
[Display(Name = "Notas")]
public string Notas { get; set; }
}
}
Luego, crea otro archivo llamado GestorValidacion.cs y define una clace parcial que vincule los metadatos:
using System.ComponentModel.DataAnnotations;
namespace ArchivoDigital.Models
{
[MetadataType(typeof(ReglasValidacionDato))]
public partial class RegistroArchivo { }
}
Ahora, al actualizar el modelo desde la base de datos, las reglas de validación persistirán. Solo deberás agregar manualmente las nuevas propiedades en ValidacionDinamica.cs si la estructura de la tabla cambia.
Finalmente, genera los cnotroladores y vistas como de costumbre. El sistema respetará todas las vlaidaciones definidas sin necesidad de reescribirlas tras cada actualización del modelo.