Entiendo que IValidatableObject
se usa para validar un objeto de una manera que permite comparar propiedades entre sí.¿Cómo uso IValidatableObject?
Me gustaría tener atributos para validar propiedades individuales, pero quiero ignorar las fallas en algunas propiedades en ciertos casos.
¿Estoy tratando de usarlo incorrectamente en el caso de abajo? Si no, ¿cómo implemento esto?
public class ValidateMe : IValidatableObject
{
[Required]
public bool Enable { get; set; }
[Range(1, 5)]
public int Prop1 { get; set; }
[Range(1, 5)]
public int Prop2 { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!this.Enable)
{
/* Return valid result here.
* I don't care if Prop1 and Prop2 are out of range
* if the whole object is not "enabled"
*/
}
else
{
/* Check if Prop1 and Prop2 meet their range requirements here
* and return accordingly.
*/
}
}
}
No puedo pensar en un escenario en el que usaría esto. ¿Puedes darme un ejemplo de dónde usarías esto? –
Si tiene columnas de seguimiento en su tabla (como el usuario que lo creó). Se requiere en la base de datos, pero usted entra en SaveChanges en el contexto para rellenarlo (eliminando la necesidad de que los desarrolladores recuerden establecerlo explícitamente). Por supuesto, usted debería validar antes de guardar. Por lo tanto, no marque la columna "creador" según sea necesario, sino que valide en contra de todas las demás columnas/propiedades. – MetalPhoenix
El problema con esta solución es que ahora depende de que la persona que llama para que su objeto sea debidamente validado. – cocogza