Freigeben über


Erste Schritte mit Entity Framework 4.0 Database First und ASP.NET 4 Web Forms

von Tom Dykstra

Die Contoso University-Beispielwebanwendung veranschaulicht, wie sie ASP.NET Web Forms Anwendungen mit Entity Framework 4.0 und Visual Studio 2010 erstellen. 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 Tutorial zeigt Beispiele in C#. Das herunterladbare Beispiel enthält Code in C# und Visual Basic.

Database First

Es gibt drei Möglichkeiten, wie Sie mit Daten in Entity Framework arbeiten können: Database First, Model First und Code First. Dieses Tutorial gilt für Database First. Informationen zu den Unterschieden zwischen diesen Workflows und anleitungen zur Auswahl des besten Workflows für Ihr Szenario finden Sie unter Entity Framework Development Workflows.

Web Forms

Diese Tutorialreihe verwendet das ASP.NET Web Forms-Modell und setzt voraus, 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 Erste Schritte mit dem Entity Framework mithilfe von ASP.NET MVC.

Softwareversionen

Im Tutorial gezeigt Funktioniert auch mit
Windows 7 Windows 8
Visual Studio 2010 Visual Studio 2010 Express für Web. Das Tutorial wurde nicht mit höheren Versionen von Visual Studio getestet. Es gibt viele Unterschiede bei der Menüauswahl, dialogfeldern und Vorlagen.
.NET 4 .NET 4.5 ist abwärtskompatibel mit .NET 4. Das Tutorial wurde jedoch nicht mit .NET 4.5 getestet.
Entity Framework 4 Das Tutorial wurde nicht mit späteren Versionen von Entity Framework getestet. Ab Entity Framework 5 verwendet EF standardmäßig die , die DbContext API mit EF 4.1 eingeführt wurde. 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 Tutorial beziehen, können Sie diese im ASP.NET Entity Framework-Forum, im Entity Framework- und LINQ to Entities-Forum oder StackOverflow.com veröffentlichen.

Überblick

Die Anwendung, die Sie in diesen Tutorials erstellen, ist eine einfache Website der Universität.

Screenshot der Startseite der Contoso University mit Links zu den Seiten

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

Image30

Image37

Bild31

Bild32

Erstellen der Webanwendung

Öffnen Sie zum Starten des Tutorials Visual Studio, und erstellen Sie dann mithilfe der Vorlage ASP.NET Webanwendung ein neues ASP.NET-Webanwendungsprojekt:

Bild01

Mit dieser Vorlage wird ein Webanwendungsprojekt erstellt, das bereits ein Stylesheet und master Seiten 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 Menü-Steuerelement namens NavigationMenu , und ersetzen Sie es durch das folgende Markup, das Menüelemente für die Seiten hinzufügt, die Sie erstellen.

<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 Seite Default.aspx , und ändern Sie das Steuerelement mit dem Content Namen 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 werden:

Screenshot der Startseite der Contoso University mit Links zu den Seiten

Erstellen der Datenbank

In diesen Tutorials verwenden Sie den Entity Framework-Datenmodell-Designer, um das Datenmodell automatisch basierend auf einer vorhandenen Datenbank zu erstellen (häufig als Database-First-Ansatz bezeichnet). Eine Alternative, die in dieser Tutorialreihe nicht behandelt wird, besteht darin, das Datenmodell manuell zu erstellen und dann vom Designer Skripts zu generieren, die die Datenbank erstellen (der Modell-First-Ansatz ).

Für die in diesem Tutorial verwendete Database-First-Methode besteht der nächste Schritt darin, dem Standort eine Datenbank hinzuzufügen. Die einfachste Möglichkeit besteht darin, zuerst das Projekt herunterzuladen, das in diesem Tutorial enthalten ist. 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 Datenbankdatei School.mdf aus dem heruntergeladenen Projekt aus.

Alternativ können Sie die Anweisungen unter Erstellen der Schulbeispieldatenbank befolgen. Unabhängig davon, ob Sie die Datenbank herunterladen oder erstellen, kopieren Sie die Datei School.mdf aus dem folgenden Ordner in den Ordner App_Data Ihrer Anwendung:

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

(Bei diesem Speicherort der MDF-Datei 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 unter Server Explorerdie Option Datenverbindungen, 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.

    Image36

    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 beliebig zu organisieren.

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

Wenn Sie die Datei School.mdf herunterladen, die in diesem Tutorial enthalten ist, können Sie das Datenbankdiagramm anzeigen, indem Sie unter Datenbankdiagramme in Server Explorer auf SchoolDiagram doppelklicken.

Bild38

Das Diagramm sieht in etwa wie folgt aus (die Tabellen können sich an anderen Speicherorten befinden als hier gezeigt):

Bild04

Erstellen des Entity Framework-Datenmodells

Jetzt können Sie ein Entity Framework-Datenmodell aus dieser Datenbank erstellen. Sie können das Datenmodell im Stammordner der Anwendung erstellen, aber für dieses Tutorial speichern Sie es in einem Ordner namens DAL (für Datenzugriffsebene).

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

Klicken Sie mit der rechten Maustaste auf den Ordner DAL , 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 Entity Data Model-Assistent gestartet. Im ersten Schritt des Assistenten ist die Option Aus Datenbank generieren standardmäßig ausgewählt. Klicken Sie auf Weiter.

Abbildung06

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 Web.config-Datei als SchoolEntities gespeichert.

Bild07

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

Image08

Nachdem das Erstellen des Modells abgeschlossen ist, zeigt Visual Studio eine grafische Darstellung der Entity Framework-Objekte (Entitäten), die Ihren Datenbanktabellen entsprechen. (Wie beim Datenbankdiagramm kann sich die Position einzelner Elemente von der position unterscheiden, die Sie in dieser Abbildung sehen. Sie können die Elemente bei Bedarf so ziehen, dass sie der Abbildung entsprechen.)

Bild09

Untersuchen des Entity Framework-Datenmodells

Sie können sehen, dass das Entitätsdiagramm dem Datenbankdiagramm mit einigen Unterschieden sehr ähnlich ist. Ein Unterschied ist das Hinzufügen von Symbolen am Ende jeder Zuordnung, die den Typ der Zuordnung angeben (Tabellenbeziehungen werden im Datenmodell als Entitätszuordnungen bezeichnet):

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

    Bild39

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

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

    Image40

    In diesem Fall kann eine Person Entität über zugeordnete Entitäten verfügen StudentGrade 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 für einen Kurs registriert ist und noch keine Note vorhanden ist, ist die Grade Eigenschaft NULL. Anders ausgedrückt: Ein Kursteilnehmer ist möglicherweise noch nicht in einem Kurs registriert, kann in einem Kurs registriert sein oder an mehreren Kursen angemeldet sein. Jede Note in einem eingeschriebenen Kurs gilt nur für einen Kursteilnehmer.

  • Eine Viele-zu-n-Zuordnung wird durch "*" und "*" dargestellt.

    Image41

    In diesem Fall kann eine Person Entität über zugeordnete Course Entitäten verfügen oder nicht, und das Gegenteil ist auch richtig: Eine Course Entität kann zugeordnete Person Entitäten aufweisen 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. Die Kursteilnehmer werden 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. Beispielsweise enthält die Courses -Eigenschaft in einer Person Entität eine Auflistung aller Entitäten, die Course mit dieser Person Entität verbunden 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 Person Tabellen und Course in einer Viel-zu-Viele-Beziehung zu verknüpfen. Mit den Navigationseigenschaften können Sie verwandte Course Entitäten aus der Person Entität und verwandte Person Entitäten aus der Course Entität abrufen, sodass die Zuordnungstabelle im Datenmodell nicht dargestellt werden muss.

Image11

Nehmen Sie für dieses Tutorial an, dass die FirstName Spalte der Person Tabelle tatsächlich sowohl den Vornamen als auch den zweiten Namen 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 ihr Datenbankäquivalent unverändert bleibt.

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

Bild13

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

Image29

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äten-Designer, und klicken Sie dann auf Modellbrowser.

Bild18

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

Image26

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

Bild19

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

Image20

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

Image21

Dadurch wird das Fenster Zuordnungsdetails geöffnet. Beachten Sie, dass in diesem Fenster angezeigt wird, dass die Datenbankspalte FirstNameFirstMidNamezugeordnet ist, in die Sie sie im Datenmodell umbenannt haben.

Image22

Entity Framework verwendet XML, um Informationen über die Datenbank, das Datenmodell und die Zuordnungen zwischen ihnen zu speichern. Die Datei SchoolModel.edmx ist eigentlich eine XML-Datei, die diese Informationen enthält. Der Designer rendert die Informationen in einem grafischen Format. Sie können die Datei aber auch als XML anzeigen, indem Sie mit der rechten Maustaste auf die EDMX-Datei in Projektmappen-Explorer klicken, auf Öffnen mit klicken und XML (Text)-Editor auswählen. (Der Datenmodell-Designer und ein XML-Editor sind nur zwei verschiedene Möglichkeiten zum Öffnen und Arbeiten mit derselben Datei, sodass Der Designer die Datei nicht gleichzeitig in einem XML-Editor öffnen und öffnen kann.)

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 .