Data Annotation

Eintrag zuletzt aktualisiert am: 11.01.2024

Eine Data Annotation (Datenannotation) ist eine Festlegung für Bedingungen, die ein Datenobjekt erfüllen muss (Validierung) oder eine Art und Weise wie sich das Datenobjekt darstellen soll.

Data Annotations sind .NET-Attribute (Metadaten-Attribute), definiert im Namensraum System.ComponentModel.DataAnnotations.
Sie werden verwendet in ASP.NET Dynamic Data (ab .NET 3.5 SP1), ASP.NET MVC und ab ASP.NET 4.5 auch in ASP.NET Webforms Model Binding.
Auch moderne GUI-Frameworks wie Blazor berücksichtigen zumindest einen Teil der Annotationen.

Data Annotations können auf Klassen- oder Propertyebene angewendet werden.

Beispiele:

[DisplayColumn("MitarbeiterNr")]
[ScaffoldTable(false)]
[Display(Name = "Beschriftung")]
[Range(0,250)]
[Required]
[StringLength(1, ErrorMessage="Bitte nur ein Zeichen!")]
[ScaffoldColumn(false)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy HH:mm}", ApplyFormatInEditMode=true, NullDisplayText="Keine Angabe",ConvertEmptyStringToNull=true)]
[RegularExpression(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", ErrorMessage="Keine gültige E-Mail-Adresse!")]
[FilterUIHint("FilterName")]

Entwickler können eigenen Datenannotationen schreiben, z.B.

/// <summary>
/// Eigene Validierungsklasse
/// Auswahl muss aus einer vorgegebene Menge von Zeichenketten kommen
/// </summary>
public class ChoiceAttribute : ValidationAttribute
{

public List<string> Choices { get; set; }
public ChoiceAttribute(params string[] choices)
{
this.Choices = choices.ToList();
}
public override bool IsValid(object value)
{
return (Choices.Contains(value.ToString()));
}
}

Diese Validierungsannotation kann dann so angewendet werden:

[Choice("Rom", "Berlin", "Moskau", "Essen-Mülheim")]
public object Abflugort;

Details

Die Datenannotation im Namensraum System.ComponentModel.DataAnnotations gibt es schon seit dem klassischen .NET Framework. Die ersten (z.B. [RegularExpression], [Range], [DataType]) wurden in .NET Framework 3.5 eingeführt. Weitere folgten in .NET Framework 4.0 (z.B. [Display], [Editable]) und .NET Framework 4.5 (z.B. [MaxLength], [Compare], [CreditCard], [Phone]). Diese Datenannotation werden auf Klassen oder Properties verwendet. Sie dienen der Spezifikation der Darstellung (z.B. [Display], [Editable]) oder der Validierung von Werten (z.B. [RegularExpression], [Compare], [Range], [Phone] und [CreditCard]). GUI-Steuerelemente müssen die entsprechenden Annotationen berücksichtigen.

Es gibt nur wenige Steuerelemente, die die Darstellungsannotationen berücksichtigen – meist schaffen sich .NET-Entwicklerinnen und Entwickler hier selbst Steuerelemente, die auf Basis solche Metadaten ein grafische Benutzeroberfläche "on the fly" zur Laufzeit erzeugen. Bei den Validierungsannotationen gibt es mehr Steuerelemente, die die Annotationen berücksichtigen, z.B. <InputText>, <InputNumber> und <InputDate> in Blazor.

Eine Validierung kann man auch unabhängig von einem Steuerelement im Programmcode ausführen. Dazu gibt es die Klassen ValidationContext, Validator, ValidationResult und ValidationException