Capisco che IValidatableObject
sia utilizzato per convalidare un oggetto in un modo che consente di confrontare le proprietà l'una con l'altra.Come utilizzare IValidatableObject?
Mi piacerebbe ancora avere attributi per convalidare le singole proprietà, ma in certi casi voglio ignorare i guasti su alcune proprietà.
Sto tentando di utilizzarlo in modo errato nel caso di seguito? Se no, come posso implementarlo?
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.
*/
}
}
}
Non riesco a pensare a uno scenario in cui vorrei usarlo. Puoi darmi un esempio di dove lo useresti? –
Se sono presenti colonne di tracciamento nella tabella (ad esempio l'utente che l'ha creata). È richiesto nel database ma si accede alle SaveChanges nel contesto per popolarlo (eliminando la necessità per gli sviluppatori di ricordarsi di impostarlo esplicitamente). Vorresti, naturalmente, confermare prima di salvare. Quindi non contrassegni la colonna "creatore" come richiesto ma convalida contro tutte le altre colonne/proprietà. – MetalPhoenix
Il problema con questa soluzione è che ora si dipende dal chiamante affinché l'oggetto venga validato correttamente. – cocogza