Ich verstehe, dass IValidatableObject
verwendet wird, um ein Objekt auf eine Weise zu validieren, die man Eigenschaften miteinander vergleichen kann.Wie verwende ich IValidatableObject?
Ich hätte immer noch gerne Attribute, um einzelne Eigenschaften zu validieren, aber ich möchte Fehler in einigen Eigenschaften in bestimmten Fällen ignorieren.
Ich versuche, es in dem Fall unten falsch zu verwenden? Wenn nicht, wie implementiere ich das?
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.
*/
}
}
}
Ich kann nicht an ein Szenario denken, wo ich das verwenden würde. Können Sie mir ein Beispiel geben, wo Sie das verwenden würden? –
Wenn Sie Tracking-Spalten in Ihrer Tabelle haben (z. B. der Benutzer, der sie erstellt hat). Es ist in der Datenbank erforderlich, aber Sie geben die SaveChanges im Kontext ein, um sie zu füllen (ohne dass Entwickler daran denken müssen, es explizit festzulegen). Sie würden natürlich vor dem Speichern validieren. Daher markieren Sie die Spalte "Creator" nicht wie erforderlich, sondern validieren sie für alle anderen Spalten/Eigenschaften. – MetalPhoenix
Das Problem mit dieser Lösung besteht darin, dass Sie jetzt vom Aufrufer abhängig sind, damit Ihr Objekt ordnungsgemäß validiert wird. – cocogza