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 derObjectContext
API entwickelt. Informationen zur Verwendung des EntityDataSource-Steuerelements mit derDbContext
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.
Benutzer können Informationen zu den Studenten, Kursen und Dozenten abrufen. Einige der Bildschirme, die Sie erstellen, werden unten gezeigt.
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:
Mit dieser Vorlage wird ein Webanwendungsprojekt erstellt, das bereits ein Stylesheet und master Seiten enthält:
Ö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:
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:
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.
Wählen Sie alle Tabellen aus, und klicken Sie dann auf Hinzufügen.
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.
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.
Das Diagramm sieht in etwa wie folgt aus (die Tabellen können sich an anderen Speicherorten befinden als hier gezeigt):
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.
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.
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.
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.
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.)
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.
In diesem Fall kann eine
Person
Entität einer Entität zugeordnetOfficeAssignment
sein oder nicht. EineOfficeAssignment
Entität muss einerPerson
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.
In diesem Fall kann eine
Person
Entität über zugeordnete Entitäten verfügenStudentGrade
oder nicht. EineStudentGrade
Entität muss einerPerson
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 dieGrade
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.
In diesem Fall kann eine
Person
Entität über zugeordneteCourse
Entitäten verfügen oder nicht, und das Gegenteil ist auch richtig: EineCourse
Entität kann zugeordnetePerson
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.
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.
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.
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.
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.
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.
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.
Erweitern Sie SchoolModel, Entitätstypen, und erweitern Sie dann den Knoten Kurs , um die Entitäten und die Eigenschaften innerhalb der Entitäten anzuzeigen.
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.
Dadurch wird das Fenster Zuordnungsdetails geöffnet. Beachten Sie, dass in diesem Fenster angezeigt wird, dass die Datenbankspalte FirstName
FirstMidName
zugeordnet ist, in die Sie sie im Datenmodell umbenannt haben.
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
.