Der Weg, dies zu handhaben, besteht aus einer Kombination von Teilklassen und einem speziellen Attribut, das es Ihnen ermöglicht, Metadaten an eine andere Klasse anzuhängen.
Das Entity Framework hilft Ihnen hier bereits weiter, indem es alle Klassen als Teilklassen generiert. Wenn Sie also eine Entität in Ihrem Modell namens Einstellungen haben, würde das EF dies erstellen:
public partial class Setting : INotifyPropertyChanging, INotifyPropertyChanged
{
// Auto-gen Eigenschaften, Methoden usw. kommen hierher.
}
Dies bedeutet, dass Sie beliebig viele andere partial class Setting
-Fragments in anderen Dateien haben können, die das EF nicht berühren wird, wenn/wenn Sie diesen Code neu generieren. Wenn Sie Validierungsattribute zu diesem hinzufügen möchten, sind zwei Schritte erforderlich:
-
Fügen Sie der Setting-Klasse ein MetadataType-Attribut hinzu. Im Body dieses Teilklasse-Fragments muss nichts vorhanden sein, es dient nur dazu, das Attribut zu verknüpfen.
[MetadataType(typeof(SettingMetadata))]
public partial class Setting
{
}
-
Erstellen Sie eine zweite Klasse, die die gleichen öffentlichen Feldnamen wie die EF-Klasse hat, und verknüpfen Sie beliebige Dateneingabeattribute. Der Compiler gleicht die Felder der Metadatenklasse mit den Feldern der EF-Klasse nach Namen ab und verhält sich so, als ob alle Metadaten, die Ihrer zweiten Klasse angefügt sind, auch in Ihrer ersten Klasse vorhanden wären.
public class SettingMetadata
{
[Display(Name="Basiszinssatz")]
[Erforderlich]
public decimal Rate
{
get;
set;
}
[Display(Name = "Erlaubniszahlungen")]
public Boolean AllowPayments
{
get;
set;
}
[Display(Name = "Basis-URL für Webdienst")]
[Erforderlich]
[SuppressMessage("Microsoft.Design", "CA1056:UriPropertiesShouldNotBeStrings", Justification = "Typ muss mit verknüpftem Metadatentyp übereinstimmen.")]
public string WebServiceUrl
{
get;
set;
}
}
Wie in der FxCop-Unterdrückungsnachricht erwähnt, müssen der Name und der Typ der Felder zwischen der Metadatenklasse und der zugehörigen Klasse übereinstimmen, damit dies funktioniert.
1 Stimmen
Welche Art von Validierung möchten Sie hinzufügen? Können Sie uns etwas Klassencode zeigen?