Entity Framework - Validierung
In diesem Kapitel lernen Sie die Validierungstechniken kennen, die in ADO.NET Entity Framework zum Validieren der Modelldaten verwendet werden können. Entity Framework bietet eine Vielzahl von Validierungsfunktionen, die für die clientseitige Validierung auf einer Benutzeroberfläche implementiert oder für die serverseitige Validierung verwendet werden können.
In Entity Framework ist die Datenvalidierung Teil der Lösung zum Abfangen fehlerhafter Daten in einer Anwendung.
Entity Framework überprüft standardmäßig alle Daten, bevor sie in die Datenbank geschrieben werden, mithilfe einer Vielzahl von Datenüberprüfungsmethoden.
Entity Framework wird jedoch nach der Datenüberprüfung der Benutzeroberfläche erstellt. In diesem Fall ist eine Entitätsüberprüfung erforderlich, um alle von EF ausgelösten Ausnahmen zu behandeln und eine generische Nachricht anzuzeigen.
Es gibt einige Techniken zur Datenüberprüfung, um Ihre Fehlerprüfung zu verbessern und Fehlermeldungen an den Benutzer zurückzugeben.
DbContext verfügt über eine überschreibbare Methode namens ValidateEntity. Wenn Sie SaveChanges aufrufen, ruft Entity Framework diese Methode für jede Entität in ihrem Cache auf, deren Status nicht unverändert ist. Sie können die Validierungslogik hier direkt einfügen, wie im folgenden Beispiel für die Studentenentität gezeigt.
public partial class UniContextEntities : DbContext {
protected override System.Data.Entity.Validation
.DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry,
System.Collections.Generic.IDictionary<object, object> items) {
if (entityEntry.Entity is Student) {
if (entityEntry.CurrentValues.GetValue<string>("FirstMidName") == "") {
var list = new List<System.Data.Entity
.Validation.DbValidationError>();
list.Add(new System.Data.Entity.Validation
.DbValidationError("FirstMidName", "FirstMidName is required"));
return new System.Data.Entity.Validation
.DbEntityValidationResult(entityEntry, list);
}
}
if (entityEntry.CurrentValues.GetValue<string>("LastName") == "") {
var list = new List<System.Data.Entity
.Validation.DbValidationError>();
list.Add(new System.Data.Entity.Validation
.DbValidationError("LastName", "LastName is required"));
return new System.Data.Entity.Validation
.DbEntityValidationResult(entityEntry, list);
}
return base.ValidateEntity(entityEntry, items);
}
}
In der obigen ValidateEntity-Methode werden die Eigenschaften FirstMidName und LastName der Schülerentität überprüft. Wenn eine dieser Eigenschaften eine leere Zeichenfolge enthält, wird eine Fehlermeldung zurückgegeben.
Schauen wir uns ein einfaches Beispiel an, in dem ein neuer Schüler erstellt wird, der Vorname des Schülers jedoch eine leere Zeichenfolge ist, wie im folgenden Code gezeigt.
class Program {
static void Main(string[] args) {
using (var context = new UniContextEntities()) {
Console.WriteLine("Adding new Student to the database");
Console.WriteLine();
try {
context.Students.Add(new Student() {
FirstMidName = "",
LastName = "Upston"
});
context.SaveChanges();
} catch (DbEntityValidationException dbValidationEx) {
foreach (DbEntityValidationResult entityErr in
dbValidationEx.EntityValidationErrors) {
foreach (DbValidationError error in entityErr.ValidationErrors) {
Console.WriteLine("Error: {0}",error.ErrorMessage);
}
}
}
Console.ReadKey();
}
}
}
Wenn das obige Beispiel kompiliert und ausgeführt wird, wird im Konsolenfenster die folgende Fehlermeldung angezeigt.
Adding new Student to the database
Error: FirstMidName is required
Wir empfehlen Ihnen, das obige Beispiel zum besseren Verständnis Schritt für Schritt auszuführen.