Freigeben über


Erste Schritte mit Entity Framework 4.0-Datenbank und ASP.NET 4-Webformularen

Von Tom Dykstra

Die Contoso University-Beispielwebanwendung veranschaulicht, wie ASP.NET Web Forms-Anwendungen mithilfe von Entity Framework 4.0 und Visual Studio 2010 erstellt werden. Die Beispielanwendung ist eine Website für eine fiktive Contoso University. Sie enthält Funktionen wie die Zulassung von Studenten, die Erstellung von Kursen und Aufgaben von Dozenten.

Das Lernprogramm zeigt Beispiele in C#. Das herunterladbare Beispiel enthält Code in C# und Visual Basic.

Datenbank zuerst

Es gibt drei Möglichkeiten zum Arbeiten mit Daten im Entity Framework: Database First, Model First und Code First. Dieses Tutorial ist für "Database First" gedacht. Informationen zu den Unterschieden zwischen diesen Workflows und Anleitungen zum Auswählen des besten für Ihr Szenarios finden Sie unter Entity Framework Development Workflows.

Webformulare

Diese Lernprogrammreihe verwendet das ASP.NET Web Forms-Modell und geht davon aus, dass Sie wissen, wie Sie mit ASP.NET Web Forms in Visual Studio arbeiten. Falls nicht, lesen Sie "Erste Schritte mit ASP.NET 4.5 Web Forms". Wenn Sie lieber mit dem ASP.NET MVC-Framework arbeiten möchten, lesen Sie die ersten Schritte mit dem Entity Framework mit ASP.NET MVC.

Softwareversionen

Im Lernprogramm gezeigt Funktioniert auch mit
Windows 7 Windows 8
Visual Studio 2010 Visual Studio 2010 Express for Web. Das Lernprogramm wurde mit späteren Versionen von Visual Studio nicht getestet. Es gibt viele Unterschiede bei den Menüauswahlen, Dialogfeldern und Vorlagen.
.NET 4 .NET 4.5 ist abwärtskompatibel mit .NET 4, das Lernprogramm wurde jedoch nicht mit .NET 4.5 getestet.
Entity Framework 4 Das Lernprogramm wurde nicht mit späteren Versionen von Entity Framework getestet. Ab Entity Framework 5 verwendet EF standardmäßig das DbContext API mit EF 4.1 eingeführte Element. Das EntityDataSource-Steuerelement wurde für die Verwendung der ObjectContext API entwickelt. Informationen zur Verwendung des EntityDataSource-Steuerelements mit der DbContext API finden Sie in diesem Blogbeitrag.

Fragen

Wenn Sie Fragen haben, die sich nicht direkt auf das Lernprogramm beziehen, können Sie sie im Forum ASP.NET Entity Framework, dem Forum "Entity Framework" und " LINQ to Entities" veröffentlichen oder StackOverflow.com.

Übersicht

Die Anwendung, die Sie in diesen Lernprogrammen erstellen, ist eine einfache Universitätswebsite.

Screenshot der Startseite der Contoso University, auf der Links zu den Seiten

Benutzer können Informationen zu den Studierenden, Kursen und Dozenten abrufen und aktualisieren. Einige der Bildschirme, die Sie erstellen, werden unten angezeigt.

Bild30

Bild37

Bild31

Bild32

Erstellen der Webanwendung

Um das Lernprogramm zu starten, öffnen Sie Visual Studio, und erstellen Sie dann ein neues ASP.NET Webanwendungsprojekt mithilfe der ASP.NET-Webanwendungsvorlage :

Bild01

Diese Vorlage erstellt ein Webanwendungsprojekt, das bereits ein Stylesheet und die Masterseiten enthält:

Bild02

Öffnen Sie die Datei "Site.Master ", und ändern Sie "My ASP.NET Application" in "Contoso University".

<h1>
    Contoso University
</h1>

Suchen Sie das benannte NavigationMenu, und ersetzen Sie es durch das folgende Markup, das Menüelemente für die Seiten hinzufügt, die Sie erstellen möchten.

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                    IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
                        <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
                        <asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
                            <asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
                            <asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
                            <asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
                            <asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
                            <asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
                        </asp:MenuItem>
                    </Items>
                </asp:Menu>

Öffnen Sie die Default.aspx Seite, und ändern Sie das Content steuerelement BodyContent wie folgt:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to Contoso University!
   </h2>
</asp:Content>

Sie haben jetzt eine einfache Startseite mit Links zu den verschiedenen Seiten, die Sie erstellen:

Screenshot der Startseite der Contoso University, auf der Links zu den Seiten

Erstellen der Datenbank

Für diese Lernprogramme verwenden Sie den Entity Framework-Datenmodell-Designer, um das Datenmodell automatisch basierend auf einer vorhandenen Datenbank zu erstellen (häufig als Datenbank-erster Ansatz bezeichnet). Eine Alternative, die in dieser Lernprogrammreihe nicht behandelt wird, besteht darin, das Datenmodell manuell zu erstellen und dann den Designer Skripte generieren zu lassen, die die Datenbank erstellen (der Modell-first-Ansatz).

Für die in diesem Tutorial verwendete Datenbank-First-Methode besteht der nächste Schritt darin, der Website eine Datenbank hinzuzufügen. Die einfachste Möglichkeit besteht darin, zuerst das Projekt herunterzuladen, das mit diesem Lernprogramm zusammenhängt. Klicken Sie dann mit der rechten Maustaste auf den ordner App_Data , wählen Sie "Vorhandenes Element hinzufügen" aus, und wählen Sie die School.mdf Datenbankdatei aus dem heruntergeladenen Projekt aus.

Eine Alternative besteht darin, die Anweisungen beim Erstellen der Schulbeispieldatenbank zu befolgen. Ob Sie die Datenbank herunterladen oder erstellen, kopieren Sie die School.mdf Datei aus dem folgenden Ordner in den App_Data Ordner Ihrer Anwendung:

%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

(An diesem Speicherort der datei .mdf wird davon ausgegangen, dass Sie SQL Server 2008 Express verwenden.)

Wenn Sie die Datenbank aus einem Skript erstellen, führen Sie die folgenden Schritte aus, um ein Datenbankdiagramm zu erstellen:

  1. Erweitern Sie im Server-ExplorerDatenverbindungen, erweitern Sie School.mdf, klicken Sie mit der rechten Maustaste auf Datenbankdiagramme, und wählen Sie "Neues Diagramm hinzufügen" aus.

    Bild35

  2. Wählen Sie alle Tabellen aus, und klicken Sie dann auf "Hinzufügen".

    Bild36

    SQL Server erstellt ein Datenbankdiagramm, das Tabellen, Spalten in den Tabellen und Beziehungen zwischen den Tabellen anzeigt. Sie können die Tabellen verschieben, um sie nach Ihren Wünschen zu organisieren.

  3. Speichern Sie das Diagramm als "SchoolDiagram", und schließen Sie es.

Wenn Sie die School.mdf Datei herunterladen, die dieses Lernprogramm enthält, können Sie das Datenbankdiagramm anzeigen, indem Sie imServer-Explorer auf SchoolDiagram doppelklicken.

Bild38

Das Diagramm sieht ungefähr so aus (die Tabellen befinden sich möglicherweise an unterschiedlichen Stellen von den hier gezeigten Daten):

Bild04

Erstellen des Entity Framework-Datenmodells

Jetzt können Sie ein Entity Framework-Datenmodell aus dieser Datenbank erstellen. Sie könnten das Datenmodell im Stammordner der Anwendung erstellen, aber für dieses Lernprogramm platzieren Sie es in einem Ordner namens DAL (für Data Access Layer).

Fügen Sie im Projektmappen-Explorer einen Projektordner namens DAL hinzu (stellen Sie sicher, dass er sich unter dem Projekt befindet, nicht unter der Projektmappe).

Klicken Sie mit der rechten Maustaste auf den DAL-Ordner , und wählen Sie dann "Hinzufügen " und " Neues Element" aus. Wählen Sie unter "Installierte Vorlagen" die Option "Daten" aus, wählen Sie die Vorlage "ADO.NET Entitätsdatenmodell " aus, nennen Sie sie SchoolModel.edmx, und klicken Sie dann auf "Hinzufügen".

Bild05

Dadurch wird der Entitätsdatenmodell-Assistent gestartet. Im ersten Assistentenschritt ist standardmäßig die Option " Aus Datenbank generieren " ausgewählt. Klicke auf Weiter.

Bild06

Behalten Sie im Schritt " Datenverbindung auswählen " die Standardwerte bei, und klicken Sie auf "Weiter". Die School-Datenbank ist standardmäßig ausgewählt, und die Verbindungseinstellung wird in der dateiWeb.config als SchoolEntities gespeichert.

Bild07

Wählen Sie im Schritt " Datenbankobjekte auswählen" alle Tabellen mit Ausnahme sysdiagrams (die für das zuvor generierte Diagramm erstellt wurde) aus, und klicken Sie dann auf "Fertig stellen".

Bild08

Nachdem das Modell erstellt wurde, zeigt Visual Studio Ihnen eine grafische Darstellung der Entity Framework-Objekte (Entitäten), die Ihren Datenbanktabellen entsprechen. (Wie bei dem Datenbankdiagramm unterscheidet sich die Position einzelner Elemente möglicherweise von dem, was Sie in dieser Abbildung sehen. Sie können die Elemente nach Bedarf an die Abbildung ziehen.)

Bild09

Untersuchen des Entity Framework-Datenmodells

Sie können sehen, dass das Entitätsdiagramm dem Datenbankdiagramm mit einigen Unterschieden sehr ähnlich aussieht. Ein Unterschied besteht darin, dass am Ende jeder Zuordnung Symbole hinzugefügt werden, die den Zuordnungstyp angeben (Tabellenbeziehungen werden als Entitätszuordnungen im Datenmodell bezeichnet):

  • Eine Eins-zu-Null- oder Eins-Zuordnung wird durch "1" und "0..1" dargestellt.

    Bild39

    In diesem Fall kann eine Person Entität einer OfficeAssignment Entität zugeordnet sein oder nicht. Eine OfficeAssignment Entität muss einer Person Entität zugeordnet sein. Mit anderen Worten, ein Kursleiter darf oder nicht einem Büro zugewiesen werden, und jedes Büro kann nur einem Kursleiter zugewiesen werden.

  • Eine eins-zu-viele Zuordnung wird durch "1" und "*" dargestellt.

    Bild40

    In diesem Fall kann eine Person Entität über zugeordnete StudentGrade Entitäten verfügen oder nicht. Eine StudentGrade Entität muss einer Person Entität zugeordnet sein. StudentGrade Entitäten stellen tatsächlich registrierte Kurse in dieser Datenbank dar; wenn ein Kursteilnehmer in einem Kurs registriert ist und es noch keine Noten gibt, ist die Grade Eigenschaft NULL. Mit anderen Worten, ein Student ist möglicherweise noch in keinem Kurs eingeschrieben, kann in einem Kurs eingeschrieben sein oder in mehreren Kursen eingeschrieben sein. Jede Klasse in einem registrierten Kurs gilt nur für einen Kursteilnehmer.

  • Eine m:n-Zuordnung wird durch "*" und "*" dargestellt.

    Bild41

    In diesem Fall kann eine Person-Entität zugeordnete Course-Entitäten haben oder nicht, und das Umgekehrte ist ebenfalls wahr: Eine Course-Entität kann über zugeordnete Person-Entitäten verfügen oder nicht. Mit anderen Worten, ein Kursleiter kann mehrere Kurse unterrichten, und ein Kurs kann von mehreren Kursleitern unterrichtet werden. (In dieser Datenbank gilt diese Beziehung nur für Kursleiter; sie verknüpft keine Kursteilnehmer mit Kursen. Die Kursteilnehmer sind in der Tabelle "StudentGrades" mit Kursen verknüpft.)

Ein weiterer Unterschied zwischen dem Datenbankdiagramm und dem Datenmodell ist der zusätzliche Abschnitt "Navigationseigenschaften " für jede Entität. Eine Navigationseigenschaft einer Entität verweist auf verwandte Entitäten. Die Courses-Eigenschaft in einer Person-Entität enthält beispielsweise eine Sammlung aller Course-Entitäten, die mit dieser Person-Entität verknüpft sind.

Bild12

Ein weiterer Unterschied zwischen der Datenbank und dem Datenmodell ist das Fehlen der CourseInstructor Zuordnungstabelle, die in der Datenbank verwendet wird, um die Tabellen Person und Course in einer m:n-Beziehung zu verknüpfen. Mit den Navigationseigenschaften können Sie verwandte Course Entitäten aus der Person Entität und den zugehörigen Person Entitäten aus der Course Entität abrufen, sodass die Zuordnungstabelle im Datenmodell nicht dargestellt werden muss.

Bild11

Nehmen wir für dieses Lernprogramm an, dass die FirstName Spalte der Person Tabelle tatsächlich sowohl den Vor- als auch den Zweitnamen einer Person enthält. Sie möchten den Namen des Felds ändern, um dies widerzuspiegeln, aber der Datenbankadministrator (DBA) möchte die Datenbank möglicherweise nicht ändern. Sie können den Namen der FirstName Eigenschaft im Datenmodell ändern, während die Datenbankentsprechung unverändert bleibt.

Klicken Sie im Designer mit der rechten Maustaste auf "FirstName " in der Person Entität, und wählen Sie dann "Umbenennen" aus.

Bild13

Geben Sie den neuen Namen "FirstMidName" ein. Dadurch wird die Art und Weise geändert, wie Sie auf die Spalte im Code verweisen, ohne die Datenbank zu ändern.

Bild29

Der Modellbrowser bietet eine weitere Möglichkeit, die Datenbankstruktur, die Datenmodellstruktur und die Zuordnung zwischen ihnen anzuzeigen. Klicken Sie zum Anzeigen mit der rechten Maustaste auf einen leeren Bereich im Entitäts-Designer, und klicken Sie dann auf "Modellbrowser".

Bild 18

Im Bereich "Modellbrowser " wird eine Strukturansicht angezeigt. (Möglicherweise wird der Bereich "Modellbrowser" mit dem Projektmappen-Explorer angedockt.) Der SchoolModel-Knoten stellt die Datenmodellstruktur dar, und der SchoolModel.Store-Knoten stellt die Datenbankstruktur dar.

Bild26

Erweitern Sie SchoolModel.Store , um die Tabellen anzuzeigen, erweitern Sie Tabellen /Ansichten , um Tabellen anzuzeigen, und erweitern Sie dann "Kurs ", um die Spalten in einer Tabelle anzuzeigen.

Bild 19

Erweitern Sie SchoolModel, erweitern Sie Entitätstypen, und erweitern Sie dann den Knoten "Kurs ", um die Entitäten und die Eigenschaften innerhalb der Entitäten anzuzeigen.

Bild20

Im Designer- oder Modellbrowserbereich können Sie sehen, wie das Entity Framework die Objekte der beiden Modelle verknüpft. Klicken Sie mit der rechten Maustaste auf die Person Entität, und wählen Sie "Tabellenzuordnung" aus.

Bild21

Dadurch wird das Fenster "Zuordnungsdetails " geöffnet. Beachten Sie, dass in diesem Fenster angezeigt wird, dass die Datenbankspalte FirstName auf FirstMidName abgebildet ist, was Sie im Datenmodell umbenannt haben.

Bild22

Entity Framework verwendet XML zum Speichern von Informationen über die Datenbank, das Datenmodell und die Zuordnungen zwischen diesen. Die Datei SchoolModel.edmx ist tatsächlich eine XML-Datei, die diese Informationen enthält. Der Designer rendert die Informationen in einem grafischen Format, aber Sie können die Datei auch als XML anzeigen, indem Sie im Projektmappen-Explorer mit der rechten Maustaste auf die edmx-Datei klicken, auf "Öffnen mit" und dann den XML-Editor (Text) auswählen. (Der Datenmodell-Designer und ein XML-Editor sind nur zwei verschiedene Methoden, um dieselbe Datei zu öffnen und zu bearbeiten, daher können Sie den Designer und den XML-Editor nicht gleichzeitig mit derselben Datei geöffnet haben.)

Sie haben jetzt eine Website, eine Datenbank und ein Datenmodell erstellt. In der nächsten exemplarischen Vorgehensweise beginnen Sie mit der Arbeit mit Daten mithilfe des Datenmodells und des ASP.NET-Steuerelements EntityDataSource .