Freigeben über


Tutorial: Verbessern der Datenüberprüfung für EF Database First mit ASP.NET MVC-App

Mithilfe von MVC, Entity Framework und ASP.NET Gerüstbau können Sie eine Webanwendung erstellen, die eine Schnittstelle zu einer vorhandenen Datenbank bereitstellt. In dieser Tutorialreihe erfahren Sie, wie Sie automatisch Code generieren, mit dem Benutzer Daten anzeigen, bearbeiten, erstellen und löschen können, die sich in einer Datenbanktabelle befinden. Der generierte Code entspricht den Spalten in der Datenbanktabelle.

Dieses Tutorial konzentriert sich auf das Hinzufügen von Datenanmerkungen zum Datenmodell, um Validierungsanforderungen und Anzeigeformatierungen anzugeben. Es wurde basierend auf dem Feedback von Benutzern im Kommentarbereich verbessert.

In diesem Tutorial:

  • Hinzufügen von Datenanmerkungen
  • Hinzufügen von Metadatenklassen

Voraussetzungen

Hinzufügen von Datenanmerkungen

Wie Sie in einem früheren Thema gesehen haben, werden einige Datenüberprüfungsregeln automatisch auf die Benutzereingabe angewendet. Beispielsweise können Sie nur eine Zahl für die Grade-Eigenschaft angeben. Um weitere Datenüberprüfungsregeln anzugeben, können Sie Ihrer Modellklasse Datenanmerkungen hinzufügen. Diese Anmerkungen werden in Der gesamten Webanwendung für die angegebene Eigenschaft angewendet. Sie können auch Formatierungsattribute anwenden, die die Anzeige der Eigenschaften ändern. z. B. das Ändern des für Textbeschriftungen verwendeten Werts.

In diesem Tutorial fügen Sie Datenanmerkungen hinzu, um die Länge der werte einzuschränken, die für die Eigenschaften FirstName, LastName und MiddleName bereitgestellt werden. In der Datenbank sind diese Werte auf 50 Zeichen beschränkt. In Ihrer Webanwendung wird diese Zeichenbeschränkung jedoch derzeit nicht erzwungen. Wenn ein Benutzer mehr als 50 Zeichen für einen dieser Werte bereitstellt, stürzt die Seite ab, wenn sie versucht, den Wert in der Datenbank zu speichern. Außerdem beschränken Sie die Bewertung auf Werte zwischen 0 und 4.

Wählen Sie Modelle>ContosoModel.edmx>ContosoModel.tt aus, und öffnen Sie die Datei Student.cs . Fügen Sie der -Klasse den folgenden hervorgehobenen Code hinzu.

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Student
    {
        public Student()
        {
            this.Enrollments = new HashSet<Enrollment>();
        }
    
        public int StudentID { get; set; }
        [StringLength(50)]
        public string LastName { get; set; }
        [StringLength(50)]
        public string FirstName { get; set; }
        public Nullable<System.DateTime> EnrollmentDate { get; set; }
        [StringLength(50)]
        public string MiddleName { get; set; }
    
        public virtual ICollection<Enrollment> Enrollments { get; set; }
    }
}

Öffnen Sie Enrollment.cs , und fügen Sie den folgenden hervorgehobenen Code hinzu.

namespace ContosoSite.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    
    public partial class Enrollment
    {
        public int EnrollmentID { get; set; }
        [Range(0, 4)]
        public Nullable<decimal> Grade { get; set; }
        public int CourseID { get; set; }
        public int StudentID { get; set; }
    
        public virtual Course Course { get; set; }
        public virtual Student Student { get; set; }
    }
}

Erstellen Sie die Projektmappe.

Klicken Sie auf Liste der Kursteilnehmer , und wählen Sie Bearbeiten aus. Wenn Sie versuchen, mehr als 50 Zeichen einzugeben, wird eine Fehlermeldung angezeigt.

Fehlermeldung anzeigen

Zurück zur Startseite. Klicken Sie auf Liste der Registrierungen, und wählen Sie Bearbeiten aus. Versuchen Sie, eine Note über 4 anzugeben. Sie erhalten diese Fehlermeldung: Die Feldnote muss zwischen 0 und 4 sein.

Hinzufügen von Metadatenklassen

Das direkte Hinzufügen der Validierungsattribute zur Modellklasse funktioniert, wenn Sie nicht erwarten, dass sich die Datenbank ändert. Wenn sich ihre Datenbank ändert und Sie die Modellklasse erneut generieren müssen, verlieren Sie jedoch alle Attribute, die Sie auf die Modellklasse angewendet haben. Dieser Ansatz kann sehr ineffizient sein und anfällig für den Verlust wichtiger Validierungsregeln sein.

Um dieses Problem zu vermeiden, können Sie eine Metadatenklasse hinzufügen, die die Attribute enthält. Wenn Sie die Modellklasse der Metadatenklasse zuordnen, werden diese Attribute auf das Modell angewendet. Bei diesem Ansatz kann die Modellklasse neu generiert werden, ohne dass alle Attribute verloren gehen, die auf die Metadatenklasse angewendet wurden.

Fügen Sie im Ordner Models eine Klasse namens Metadata.cs hinzu.

Ersetzen Sie den Code in Metadata.cs durch den folgenden Code.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    public class StudentMetadata
    {
        [StringLength(50)]
        [Display(Name="Last Name")]
        public string LastName;

        [StringLength(50)]
        [Display(Name="First Name")]
        public string FirstName;

        [StringLength(50)]
        [Display(Name="Middle Name")]
        public string MiddleName;

        [Display(Name = "Enrollment Date")]
        public Nullable<System.DateTime> EnrollmentDate;
    }

    public class EnrollmentMetadata
    {
        [Range(0, 4)]
        public Nullable<decimal> Grade;
    }
}

Diese Metadatenklassen enthalten alle Validierungsattribute, die Sie zuvor auf die Modellklassen angewendet haben. Das Display-Attribut wird verwendet, um den für Textbeschriftungen verwendeten Wert zu ändern.

Jetzt müssen Sie die Modellklassen den Metadatenklassen zuordnen.

Fügen Sie im Ordner Models eine Klasse mit dem Namen PartialClasses.cs hinzu.

Ersetzen Sie den Inhalt der Datei durch den folgenden Code.

using System;
using System.ComponentModel.DataAnnotations;

namespace ContosoSite.Models
{
    [MetadataType(typeof(StudentMetadata))]
    public partial class Student
    {
    }

    [MetadataType(typeof(EnrollmentMetadata))]
    public partial class Enrollment
    {
    }
}

Beachten Sie, dass jede Klasse als partial Klasse markiert ist und mit dem Namen und Namespace als automatisch generierte Klasse übereinstimmt. Indem Sie das Metadaten-Attribut auf die partielle Klasse anwenden, stellen Sie sicher, dass die Datenüberprüfungsattribute auf die automatisch generierte Klasse angewendet werden. Diese Attribute gehen nicht verloren, wenn Sie die Modellklassen neu generieren, da das Metadatenattribut in partiellen Klassen angewendet wird, die nicht neu generiert werden.

Öffnen Sie die Datei ContosoModel.edmx , um die automatisch generierten Klassen neu zu generieren. Klicken Sie erneut mit der rechten Maustaste auf die Entwurfsoberfläche, und wählen Sie Modell aus Datenbank aktualisieren aus. Obwohl Sie die Datenbank nicht geändert haben, werden die Klassen durch diesen Prozess neu generiert. Wählen Sie auf der Registerkarte Aktualisieren die Option Tabellen und Fertig stellen aus.

Speichern Sie die Datei ContosoModel.edmx , um die Änderungen anzuwenden.

Öffnen Sie die Datei Student.cs oder die Datei Enrollment.cs , und beachten Sie, dass die zuvor angewendeten Datenüberprüfungsattribute nicht mehr in der Datei enthalten sind. Führen Sie jedoch die Anwendung aus, und beachten Sie, dass die Validierungsregeln weiterhin angewendet werden, wenn Sie Daten eingeben.

Zusammenfassung

Diese Reihe bot ein einfaches Beispiel für das Generieren von Code aus einer vorhandenen Datenbank, mit dem Benutzer Daten bearbeiten, aktualisieren, erstellen und löschen können. Zum Erstellen des Projekts wurden ASP.NET MVC 5, Entity Framework und ASP.NET Gerüstbau verwendet.

Ein einführendes Beispiel für die Code First-Entwicklung finden Sie unter Erste Schritte mit ASP.NET MVC 5.

Ein komplexeres Beispiel finden Sie unter Erstellen eines Entity Framework-Datenmodells für eine ASP.NET MVC 4-App. Beachten Sie, dass die DbContext-API, die Sie für die Arbeit mit Daten in Database First verwenden, mit der API identisch ist, die Sie für die Arbeit mit Daten in Code First verwenden. Selbst wenn Sie Database First verwenden möchten, können Sie in einem Code First-Tutorial erfahren, wie Sie komplexere Szenarien wie das Lesen und Aktualisieren verwandter Daten, das Behandeln von Parallelitätskonflikten usw. behandeln. Der einzige Unterschied besteht darin, wie die Datenbank-, Kontext- und Entitätsklassen erstellt werden.

Zusätzliche Ressourcen

Eine vollständige Liste der Datenüberprüfungsanmerkungen, die Sie auf Eigenschaften und Klassen anwenden können, finden Sie unter System.ComponentModel.DataAnnotations.

Nächste Schritte

In diesem Tutorial:

  • Hinzugefügte Datenanmerkungen
  • Hinzugefügte Metadatenklassen

Informationen zum Bereitstellen einer Web-App und einer SQL-Datenbank für Azure App Service finden Sie in diesem Tutorial: