Ich benutze sehr gerne „CodeFirst“ für Erstellung meine Applikationen.
Für Properties von Models(Entities) kann ich dann da ein Attribute definieren indem ich einen String für Anzeige festlegen kann. Hier ein Beispiel:
class Class1 { [DisplayName("Name of Class1")] public string Name { get; set; } }
Es funktioniert auch soweit ganz gut , bis man auf Idee kommt , die Modelklassen von einander abzuleiten. Jeder Ableitung von Class1 würde jetzt „Name of Class1“ als „DisplayName“ zurückliefen.
Lösung
Stelle dir vor folgende Situation:
class Class2: Class1 { [DisplayName("Class2 Vorname")] public string Vorname { get; set; } }
Jetzt wird „Name of Class1“ für „Name“ – Property und „Class2 Vorname“ für Vorname benutzt. Hier möchte ich aber z.B. für „Name“ auch „Class2 Name“ angezeigt bekommen.
Aber da „Name“ geerbt wurde kann ich diese Attribute nicht mehr überschreiben. Da hilft „MetadataType“-Attribute . Hier wie man damit solche Attribute überschreiben kann.
[MetadataType(typeof(Class2Metadata)] class Class2 : class1 { class Class2Metadata { [DisplayName("Class2 Name")] public string Name {get; set;} } [DisplayName("Class2 Vorname")] public string Vorname {get;set;} }
Jetzt soll es funktionieren.