Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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. Informationen zur Lernprogrammreihe finden Sie im ersten Lernprogramm in der Reihe
Das EntityDataSource-Steuerelement
Im vorherigen Lernprogramm haben Sie eine Website, eine Datenbank und ein Datenmodell erstellt. In diesem Lernprogramm arbeiten Sie mit dem EntityDataSource Steuerelement, das ASP.NET bereitstellt, um die Arbeit mit einem Entity Framework-Datenmodell zu vereinfachen. Sie erstellen ein GridView Steuerelement zum Anzeigen und Bearbeiten von Kursteilnehmerdaten, ein DetailsView Steuerelement zum Hinzufügen neuer Kursteilnehmer und ein DropDownList Steuerelement für die Auswahl einer Abteilung (die Sie später zum Anzeigen zugeordneter Kurse verwenden).
Beachten Sie, dass Sie in dieser Anwendung keine Eingabeüberprüfung zu Seiten hinzufügen, die die Datenbank aktualisieren, und einige der Fehlerbehandlungen sind nicht so robust wie in einer Produktionsanwendung erforderlich. Das hält das Lernprogramm fokussiert auf das Entity Framework und verhindert, dass es zu lang wird. Ausführliche Informationen zum Hinzufügen dieser Features zu Ihrer Anwendung finden Sie unter Überprüfen der Benutzereingabe in ASP.NET Webseiten und Fehlerbehandlung in ASP.NET Seiten und Anwendungen.
Hinzufügen und Konfigurieren des EntityDataSource-Steuerelements
Sie beginnen mit der Konfiguration eines EntityDataSource Steuerelements zum Lesen Person von Entitäten aus dem Entitätssatz People .
Stellen Sie sicher, dass Visual Studio geöffnet ist und dass Sie mit dem Projekt arbeiten, das Sie in Teil 1 erstellt haben. Wenn Sie das Projekt seit dem Erstellen des Datenmodells noch nicht erstellt haben oder seit der letzten Änderung, die Sie daran vorgenommen haben, erstellen Sie das Projekt jetzt. Änderungen am Datenmodell werden dem Designer erst zur Verfügung gestellt, wenn das Projekt erstellt wurde.
Erstellen Sie eine neue Webseite mit dem Webformular mit Masterseite und nennen Sie sie Students.aspx.
Geben Sie Site.Master als Masterseite an. Alle Seiten, die Sie für diese Lernprogramme erstellen, verwenden diese Gestaltungsvorlage.
Fügen Sie in der Quellansicht eine Überschrift zum Steuerelement namens Content2 hinzu, wie im folgenden Beispiel gezeigt:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Student List</h2>
</asp:Content>
Ziehen Sie auf der Registerkarte "Daten " der Toolbox ein EntityDataSource Steuerelement auf die Seite, legen Sie es unter der Überschrift ab, und ändern Sie die ID in StudentsEntityDataSource:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Student List</h2>
<asp:EntityDataSource ID="StudentsEntityDataSource" runat="server">
</asp:EntityDataSource>
</asp:Content>
Wechseln Sie zur Entwurfsansicht , klicken Sie auf das Smarttag des Datenquellensteuerelements, und klicken Sie dann auf " Datenquelle konfigurieren ", um den Assistenten zum Konfigurieren der Datenquelle zu starten.
Wählen Sie im Schritt " ObjectContext konfigurieren""SchoolEntities " als Wert für benannte Verbindung aus, und wählen Sie "SchoolEntities " als DefaultContainerName-Wert aus. Klicken Sie dann auf Weiter.
Hinweis: Wenn Sie an diesem Punkt das folgende Dialogfeld erhalten, müssen Sie das Projekt erstellen, bevor Sie fortfahren.
Wählen Sie im Schritt " Datenauswahl konfigurieren" " Personen " als Wert für "EntitySetName" aus. Vergewissern Sie sich unter "Auswählen", dass das Kontrollkästchen "A auswählen" aktiviert ist. Wählen Sie dann die Optionen zum Aktivieren von Updates und Löschen aus. Wenn Sie fertig sind, klicken Sie auf "Fertig stellen".
Konfigurieren von Datenbankregeln zum Zulassen des Löschens
Sie erstellen eine Seite, auf der Benutzer Kursteilnehmer aus der Person Tabelle löschen können, die drei Beziehungen zu anderen Tabellen (Course, StudentGradeund OfficeAssignment) aufweisen. Standardmäßig verhindert die Datenbank, dass Sie eine Zeile Person löschen, wenn in einer der anderen Tabellen verwandte Zeilen vorhanden sind. Sie können die verknüpften Zeilen zuerst manuell löschen, oder Sie können die Datenbank so konfigurieren, dass sie automatisch gelöscht wird, wenn Sie eine Person Zeile löschen. Für Schülerdatensätze in diesem Lernprogramm konfigurieren Sie die Datenbank so, dass die zugehörigen Daten automatisch gelöscht werden. Da Kursteilnehmer nur verwandte Zeilen in der StudentGrade Tabelle haben können, müssen Sie nur eine der drei Beziehungen konfigurieren.
Wenn Sie die School.mdf Datei verwenden, die Sie aus dem Projekt heruntergeladen haben, das dieses Lernprogramm enthält, können Sie diesen Abschnitt überspringen, da diese Konfigurationsänderungen bereits vorgenommen wurden. Wenn Sie die Datenbank durch Ausführen eines Skripts erstellt haben, konfigurieren Sie die Datenbank, indem Sie die folgenden Verfahren ausführen.
Öffnen Sie im Server-Explorer das Datenbankdiagramm, das Sie in Teil 1 erstellt haben. Klicken Sie mit der rechten Maustaste auf die Beziehung zwischen Person und StudentGrade (die Linie zwischen Tabellen), und wählen Sie dann "Eigenschaften" aus.
Erweitern Sie im EigenschaftenfensterINSERT und UPDATE Specification, und legen Sie die DeleteRule-Eigenschaft auf Cascade fest.
Speichern und schließen Sie das Diagramm. Wenn Sie gefragt werden, ob Sie die Datenbank aktualisieren möchten, klicken Sie auf "Ja".
Um sicherzustellen, dass das Modell die im Speicher befindlichen Entitäten mit der Datenbank synchronisiert hält, müssen Sie entsprechende Regeln im Datenmodell festlegen. Öffnen Sie SchoolModel.edmx, klicken Sie mit der rechten Maustaste auf die Zuordnungslinie zwischen Person und StudentGradeund und wählen Sie dann "Eigenschaften" aus.
Legen Sie im Eigenschaftenfenster"End1 OnDelete " auf "Cascade" fest.
Speichern und schließen Sie die Datei SchoolModel.edmx , und erstellen Sie das Projekt dann neu.
Im Allgemeinen haben Sie beim Ändern der Datenbank mehrere Möglichkeiten zum Synchronisieren des Modells:
- Klicken Sie bei bestimmten Arten von Änderungen (z. B. Hinzufügen oder Aktualisieren von Tabellen, Ansichten oder gespeicherten Prozeduren) mit der rechten Maustaste auf den Designer, und wählen Sie "Modell aktualisieren" aus der Datenbank aus, damit der Designer die Änderungen automatisch vornehmen kann.
- Generieren Sie das Datenmodell neu.
- Manuelle Aktualisierungen wie diese vornehmen.
In diesem Fall könnten Sie das Modell neu generieren oder die tabellen aktualisiert haben, die von der Beziehungsänderung betroffen sind, aber dann müssen Sie die Feldnamenänderung erneut vornehmen (von FirstName zu FirstMidName).
Verwenden eines GridView-Steuerelements zum Lesen und Aktualisieren von Entitäten
In diesem Abschnitt verwenden Sie ein GridView Steuerelement zum Anzeigen, Aktualisieren oder Löschen von Kursteilnehmern.
Öffnen oder wechseln Sie zu Students.aspx , und wechseln Sie zur Entwurfsansicht . Ziehen Sie auf der Registerkarte "Daten " der Toolbox ein GridView Steuerelement rechts neben dem EntityDataSource Steuerelement, nennen Sie es StudentsGridView, klicken Sie auf das Smarttag, und wählen Sie dann "StudentsEntityDataSource " als Datenquelle aus.
Klicken Sie auf "Schema aktualisieren" (klicken Sie auf "Ja ", wenn Sie zur Bestätigung aufgefordert werden), und klicken Sie dann auf "Paging aktivieren", " Sortieren aktivieren", " Bearbeiten aktivieren" und "Löschen aktivieren".
Klicken Sie auf "Spalten bearbeiten".
Löschen Sie im Feld "Ausgewählte Felder" "PersonID", "Nachname" und "HireDate". Normalerweise wird für Benutzer kein Datensatzschlüssel angezeigt, der Einstellungstermin ist für Schüler nicht relevant, und Sie fügen beide Teile des Namens in ein Feld ein, sodass Sie nur eines der Namensfelder benötigen.
Wählen Sie das Feld "FirstMidName " aus, und klicken Sie dann auf "Dieses Feld in ein TemplateField konvertieren".
Führen Sie die gleichen Schritte für EnrollmentDate aus.
Klicken Sie auf "OK ", und wechseln Sie dann zur Quellansicht . Die verbleibenden Änderungen sind einfacher direkt im Markup zu erledigen. Das GridView Steuerelement-Markup sieht nun wie im folgenden Beispiel aus.
<asp:GridView ID="StudentsGridView" runat="server" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="PersonID"
DataSourceID="StudentsEntityDataSource">
<Columns>
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" />
<asp:TemplateField HeaderText="FirstMidName" SortExpression="FirstMidName">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("FirstMidName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("FirstMidName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="EnrollmentDate" SortExpression="EnrollmentDate">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("EnrollmentDate") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("EnrollmentDate") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Die erste Spalte nach dem Befehlsfeld ist ein Vorlagenfeld, das derzeit den Vornamen anzeigt. Ändern Sie das Markup für dieses Vorlagenfeld so, dass es wie im folgenden Beispiel aussieht:
<asp:TemplateField HeaderText="Name" SortExpression="LastName">
<EditItemTemplate>
<asp:TextBox ID="LastNameTextBox" runat="server" Text='<%# Bind("LastName") %>'></asp:TextBox>
<asp:TextBox ID="FirstNameTextBox" runat="server" Text='<%# Bind("FirstMidName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="LastNameLabel" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>,
<asp:Label ID="FirstNameLabel" runat="server" Text='<%# Eval("FirstMidName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Im Anzeigemodus zeigen zwei Label Steuerelemente den Vor- und Nachnamen an. Im Bearbeitungsmodus werden zwei Textfelder bereitgestellt, damit Sie den Vor- und Nachnamen ändern können. Wie bei den Label-Steuerelementen im Anzeigemodus verwenden Sie Bind- und Eval-Ausdrücke genauso wie bei den ASP.NET-Datenquellensteuerelementen, die eine direkte Verbindung zu Datenbanken herstellen. Der einzige Unterschied besteht darin, dass Sie Entitätseigenschaften anstelle von Datenbankspalten angeben.
Die letzte Spalte ist ein Vorlagenfeld, das das Registrierungsdatum anzeigt. Ändern Sie das Markup für dieses Feld so, dass es wie im folgenden Beispiel aussieht:
<asp:TemplateField HeaderText="Enrollment Date" SortExpression="EnrollmentDate">
<EditItemTemplate>
<asp:TextBox ID="EnrollmentDateTextBox" runat="server" Text='<%# Bind("EnrollmentDate", "{0:d}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="EnrollmentDateLabel" runat="server" Text='<%# Eval("EnrollmentDate", "{0:d}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Im Anzeige- und Bearbeitungsmodus bewirkt die Formatzeichenfolge "{0,d}", dass das Datum im Format "kurzes Datum" angezeigt wird. (Möglicherweise ist Ihr Computer so konfiguriert, dass dieses Format anders als die in diesem Lernprogramm gezeigten Bildschirmbilder angezeigt wird.)
Beachten Sie, dass der Designer in jedem dieser Vorlagenfelder standardmäßig einen Bind Ausdruck verwendet hat, aber Sie haben dies in einen Eval Ausdruck in den ItemTemplate Elementen geändert. Der Bind Ausdruck stellt die Daten in GridView Steuerelementeigenschaften zur Verfügung, falls Sie auf die Daten im Code zugreifen müssen. Auf dieser Seite müssen Sie nicht im Code auf diese Daten zugreifen, sodass Sie dies effizienter verwenden Evalkönnen. Weitere Informationen finden Sie unter Bezug Ihrer Daten aus den Datenkontrollmechanismen.
Überarbeiten des EntityDataSource-Steuerelementmarkups zur Verbesserung der Leistung
Entfernen Sie im Markup für das EntityDataSource Steuerelement die ConnectionString und DefaultContainerName Attribute und ersetzen Sie diese durch das ContextTypeName="ContosoUniversity.DAL.SchoolEntities" Attribut. Dies ist eine Änderung, die Sie jedes Mal vornehmen sollten, wenn Sie ein EntityDataSource Steuerelement erstellen, es sei denn, Sie müssen eine Verbindung verwenden, die sich von der in der Objektkontextklasse hartcodierten unterscheidet. Die Verwendung des Attributs ContextTypeName bietet die folgenden Vorteile:
- Bessere Leistung. Wenn das
EntityDataSourceSteuerelement das Datenmodell mit den AttributenConnectionStringundDefaultContainerNameinitialisiert, führt es zusätzliche Aufgaben aus, um Metadaten bei jeder Anforderung zu laden. Dies ist nicht erforderlich, wenn Sie dasContextTypeNameAttribut angeben. - Lazy Loading ist standardmäßig in den generierten Objektkontext-Klassen (wie z.B.
SchoolEntitiesin diesem Lernprogramm) im Entity Framework 4.0 aktiviert. Dies bedeutet, dass Navigationseigenschaften automatisch mit verwandten Daten geladen werden, wenn Sie sie benötigen. Lazy Loading wird später in diesem Lernprogramm ausführlicher erläutert. - Alle Anpassungen, die Sie auf die Objektkontextklasse angewendet haben (in diesem Fall die
SchoolEntitiesKlasse), stehen Steuerelementen zur Verfügung, die dasEntityDataSourceSteuerelement verwenden. Das Anpassen der Objektkontextklasse ist ein erweitertes Thema, das in dieser Lernprogrammreihe nicht behandelt wird. Weitere Informationen finden Sie unter Erweitern von generierten Entity Framework-Typen.
Das Markup ähnelt nun dem folgenden Beispiel (die Reihenfolge der Eigenschaften kann unterschiedlich sein):
<asp:EntityDataSource ID="StudentsEntityDataSource" runat="server"
ContextTypeName="ContosoUniversity.DAL.SchoolEntities" EnableFlattening="False"
EntitySetName="People"
EnableDelete="True" EnableUpdate="True">
</asp:EntityDataSource>
Das EnableFlattening Attribut bezieht sich auf ein Feature, das in früheren Versionen des Entity Framework erforderlich war, da Fremdschlüsselspalten nicht als Entitätseigenschaften verfügbar gemacht wurden. Mit der aktuellen Version können Fremdschlüsselzuordnungen verwendet werden, was bedeutet, dass Fremdschlüsseleigenschaften für alle außer n:n-Beziehungen bereitgestellt werden. Wenn Ihre Entitäten Fremdschlüsseleigenschaften und keine komplexen Typen aufweisen, können Sie dieses Attribut auf festlegen False. Entfernen Sie das Attribut nicht aus dem Markup, da der Standardwert lautet True. Weitere Informationen finden Sie unter "Flattening Objects (EntityDataSource)".
Öffnen Sie die Seite, und sehen Sie eine Liste der Kursteilnehmer und Mitarbeiter (Sie filtern nur nach Kursteilnehmern im nächsten Tutorial). Der Vorname und der Nachname werden zusammen angezeigt.
Klicken Sie zum Sortieren der Anzeige auf einen Spaltennamen.
Klicken Sie in einer beliebigen Zeile auf "Bearbeiten ". Textfelder werden angezeigt, in denen Sie den Vor- und Nachnamen ändern können.
Die Schaltfläche " Löschen " funktioniert ebenfalls. Klicken Sie auf "Löschen" für eine Zeile mit einem Registrierungsdatum, und die Zeile wird ausgeblendet. (Zeilen ohne Registrierungsdatum stellen Dozenten dar, und möglicherweise wird ein referenzieller Integritätsfehler angezeigt. Im nächsten Lernprogramm filtern Sie diese Liste so, dass sie nur Studierende enthält.)
Anzeigen von Daten aus einer Navigationseigenschaft
Angenommen, Sie möchten wissen, in wie vielen Kursen jeder Kursteilnehmer registriert ist. Das Entity Framework stellt diese Informationen in der StudentGrades Navigationseigenschaft der Person Entität bereit. Da der Datenbankentwurf nicht zulässt, dass ein Student in einem Kurs eingeschrieben wird, ohne eine Note zugewiesen zu haben, können Sie für dieses Lernprogramm davon ausgehen, dass das Vorhandensein einer Zeile in der StudentGrade Tabelle, die einem Kurs zugeordnet ist, identisch mit der Einschreibung im Kurs ist. (Die Courses Navigationseigenschaft ist nur für Kursleiter vorgesehen.)
Wenn Sie das ContextTypeName Attribut des EntityDataSource Steuerelements verwenden, ruft Entity Framework automatisch Informationen für eine Navigationseigenschaft ab, wenn Sie auf diese Eigenschaft zugreifen. Dies wird als faules Laden bezeichnet. Dies kann jedoch ineffizient sein, da sie jedes Mal, wenn zusätzliche Informationen benötigt werden, einen separaten Aufruf der Datenbank zur Folge hat. Wenn Sie Daten von der Navigationseigenschaft für jede vom EntityDataSource-Steuerelement zurückgegebene Entität benötigen, ist es effizienter, die zugehörigen Daten zusammen mit der Entität selbst in einem einzigen Datenbankaufruf abzurufen. Dies wird Eager Loading genannt, und Sie geben Eager Loading für eine Navigationseigenschaft an, indem Sie die Include Eigenschaft des EntityDataSource Steuerelements festlegen.
In Students.aspx möchten Sie die Anzahl der Kurse für jeden Kursteilnehmer anzeigen, daher ist Eager Loading die beste Wahl. Wenn Sie alle Studierenden anzeigen, aber die Anzahl der Kurse nur für einige von ihnen sehen möchten (was zusätzlich zu den Markups das Schreiben von Code erfordern würde), könnte Lazy Loading die bessere Wahl sein.
Öffnen oder wechseln Sie zu Students.aspx, wechseln Sie zur Entwurfsansicht , wählen Sie aus, und legen Sie StudentsEntityDataSourceim Fenster "Eigenschaften " die Eigenschaft "Einschließen" auf "StudentGrades" fest. (Wenn Sie mehrere Navigationseigenschaften abrufen möchten, können Sie deren Namen durch Kommas getrennt angeben, z. B. StudentGrades, Kurse.)
Wechseln zur Quellansicht . Fügen Sie im StudentsGridView Steuerelement nach dem letzten asp:TemplateField Element das folgende neue Vorlagenfeld hinzu:
<asp:TemplateField HeaderText="Number of Courses">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("StudentGrades.Count") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Im Eval Ausdruck können Sie auf die Navigationseigenschaft StudentGrades verweisen. Da diese Eigenschaft eine Auflistung enthält, verfügt sie über eine Count Eigenschaft, mit der Sie die Anzahl der Kurse anzeigen können, in denen der Kursteilnehmer registriert ist. In einem späteren Lernprogramm erfahren Sie, wie Sie Daten aus Navigationseigenschaften anzeigen, die einzelne Entitäten anstelle von Sammlungen enthalten. Beachten Sie, dass Sie keine BoundField Elemente verwenden können, um Daten aus Navigationseigenschaften anzuzeigen.
Führen Sie die Seite aus, und Sie sehen jetzt, in wie vielen Kursen jeder Kursteilnehmer registriert ist.
Verwenden eines DetailsView-Steuerelements zum Einfügen von Entitäten
Der nächste Schritt besteht darin, eine Seite mit einem DetailsView Steuerelement zu erstellen, mit dem Sie neue Kursteilnehmer hinzufügen können. Schließen Sie den Browser, und erstellen Sie dann mithilfe der Gestaltungsvorlage "Site.Master " eine neue Webseite. Benennen Sie die Seite StudentsAdd.aspx, und wechseln Sie dann zur Quellansicht .
Fügen Sie das folgende Markup hinzu, um das vorhandene Markup für das Content Steuerelement namens Content2zu ersetzen:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Add New Students</h2>
<asp:EntityDataSource ID="StudentsEntityDataSource" runat="server"
ContextTypeName="ContosoUniversity.DAL.SchoolEntities" EnableFlattening="False"
EnableInsert="True" EntitySetName="People">
</asp:EntityDataSource>
<asp:DetailsView ID="StudentsDetailsView" runat="server"
DataSourceID="StudentsEntityDataSource" AutoGenerateRows="False"
DefaultMode="Insert">
<Fields>
<asp:BoundField DataField="FirstMidName" HeaderText="First Name"
SortExpression="FirstMidName" />
<asp:BoundField DataField="LastName" HeaderText="Last Name"
SortExpression="LastName" />
<asp:BoundField DataField="EnrollmentDate" HeaderText="Enrollment Date"
SortExpression="EnrollmentDate" />
<asp:CommandField ShowInsertButton="True" />
</Fields>
</asp:DetailsView>
</asp:Content>
Dieses Markup erstellt ein EntityDataSource Steuerelement, das dem steuerelement ähnelt, das Sie in Students.aspx erstellt haben, mit der Ausnahme, dass es das Einfügen ermöglicht. Wie bei dem GridView Steuerelement werden die gebundenen Felder des DetailsView Steuerelements genau so codiert, wie sie für ein Datensteuerelement gelten, das eine direkte Verbindung mit einer Datenbank herstellt, mit der Ausnahme, dass sie auf Entitätseigenschaften verweisen. In diesem Fall wird das DetailsView Steuerelement nur zum Einfügen von Zeilen verwendet, sodass Sie den Standardmodus auf " Insertfestgelegt haben.
Öffnen Sie die Seite und fügen Sie einen neuen Studenten hinzu.
Nachdem Sie einen neuen Kursteilnehmer eingefügt haben, geschieht nichts, aber wenn Sie jetzt Students.aspx ausführen, werden die neuen Schülerinformationen angezeigt.
Anzeigen von Daten in einer Drop-Down Liste
In den folgenden Schritten verknüpfen Sie ein DropDownList Steuerelement mit einem Entitätssatz mithilfe eines EntityDataSource Steuerelements. In diesem Teil des Lernprogramms werden Sie mit dieser Liste nicht viel tun. In nachfolgenden Teilen verwenden Sie jedoch die Liste, damit Benutzer eine Abteilung auswählen können, um kurse anzuzeigen, die der Abteilung zugeordnet sind.
Erstellen Sie eine neue Webseite mit dem Namen Courses.aspx. Fügen Sie in der Quellansicht dem Steuerelement, das Content den Namen Content2hat, eine Überschrift hinzu:
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Courses by Department</h2>
</asp:Content>
Fügen Sie in der Entwurfsansicht der Seite wie zuvor ein EntityDataSource Steuerelement hinzu, aber benennen Sie es diesmal DepartmentsEntityDataSource. Wählen Sie "Departments " als EntitySetName-Wert aus, und wählen Sie nur die Eigenschaften "DepartmentID" und "Name " aus.
Ziehen Sie auf der Registerkarte "Standard " der Toolbox ein DropDownList Steuerelement auf die Seite, nennen Sie es DepartmentsDropDownList, klicken Sie auf das Smarttag, und wählen Sie "Datenquelle auswählen " aus, um den DataSource-Konfigurations-Assistenten zu starten.
Wählen Sie im Schritt "Datenquelle auswählen" "DepartmentsEntityDataSource" als Datenquelle aus, klicken Sie auf "Schema aktualisieren", und wählen Sie dann "Name" als Datenfeld aus, das angezeigt werden soll, und "DepartmentID" als Wertdatenfeld. Klicke auf OK.
Die Methode, die Sie verwenden, um das Steuerelement mithilfe von Entity Framework zu databindieren, ist identisch mit anderen ASP.NET Datenquellensteuerelementen, mit Ausnahme der Angabe von Entitäten und Entitätseigenschaften.
Wechseln Sie zur Quellansicht, und fügen Sie "Abteilung auswählen:" unmittelbar vor dem Steuerelement DropDownList hinzu.
Select a department:
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="EntityDataSource1" DataTextField="Name"
DataValueField="DepartmentID">
</asp:DropDownList>
Zur Erinnerung: Ändern Sie das Markup für das EntityDataSource-Steuerelement an diesem Punkt, indem Sie die ConnectionString- und DefaultContainerName-Attribute durch ein ContextTypeName="ContosoUniversity.DAL.SchoolEntities"-Attribut ersetzen. Es empfiehlt sich oft, zu warten, bis Sie das datengebundene Steuerelement erstellt haben, das mit dem Datenquellensteuerelement verknüpft ist, bevor Sie das EntityDataSource Steuerelementmarkup ändern, denn nachdem Sie die Änderung vorgenommen haben, stellt der Designer Ihnen keine Aktualisierungsschema-Option im datengebundenen Steuerelement zur Verfügung.
Führen Sie die Seite aus, und Sie können eine Abteilung aus der Dropdownliste auswählen.
Dies schließt die Einführung in die Verwendung des EntityDataSource Steuerelements ab. Das Arbeiten mit diesem Steuerelement unterscheidet sich in der Regel nicht von der Arbeit mit anderen ASP.NET Datenquellensteuerelementen, mit der Ausnahme, dass Sie auf Entitäten und Eigenschaften anstelle von Tabellen und Spalten verweisen. Die einzige Ausnahme ist, wenn Sie auf Navigationseigenschaften zugreifen möchten. Im nächsten Lernprogramm sehen Sie, dass die Syntax, die Sie mit dem EntityDataSource Steuerelement verwenden, sich möglicherweise auch von anderen Datenquellen-Steuerelementen unterscheidet, wenn Sie Daten filtern, gruppieren und sortieren.