Freigeben über


Exemplarische Vorgehensweise: Abrufen von Entitätstypen mit einer gespeicherten Prozedur

In diesem Thema wird gezeigt, wie eine Auflistung von Entitätstypen mit einer gespeicherten Prozedur abgerufen werden kann. Im Rahmen dieser exemplarischen Vorgehensweise verwenden Sie den ADO.NET Entity Data Model-Designer (Entity Designer), um eine gespeicherte Prozedur zu importieren und einen Function Import zu erstellen, der eine Auflistung von Entitätstypen zurückgibt.

Gespeicherte Prozeduren im Entity Data Model (EDM) können vom Anwendungscode aus aufgerufen werden. Wenn eine gespeicherte Prozedur dem konzeptionellen Modell hinzugefügt wird, wird sie als Function Import bezeichnet. Ein Function Import kann Auflistungen von einfachen Typen oder Entitätstypen oder keinen Wert zurückgeben.

NoteHinweis

Damit ein Function Import einen EntityType zurückgibt, müssen die von der entsprechenden gespeicherten Prozedur zurückgegebenen Spalten genau mit den Eigenschaften des zurückgegebenen EntityType übereinstimmen.

Wenn der Assistent für Entity Data Model ein EDM aus einer Datenbank generiert, werden für jede gespeicherte Prozedur in der Datenbank Einträge im Speichermodell erstellt. Dem konzeptionellen Modell werden beim Erstellen eines Function Import entsprechende Einträge hinzugefügt. Weitere Informationen zum Erstellen eines Function Import finden Sie unter Gewusst wie: Importieren einer gespeicherten Prozedur.

Erforderliche Komponenten

Um diese exemplarische Vorgehensweise durchzuführen, müssen Sie die Anwendung CourseManager erstellen. Weitere Informationen und Anweisungen finden Sie im Entity Framework-Schnellstart. Nachdem Sie diese Anwendung erstellt haben, ändern Sie deren EDM, indem Sie einen Function Import erstellen, der auf der gespeicherten Prozedur GetStudentGrades basiert.

NoteHinweis

Da viele der exemplarischen Vorgehensweisen in dieser Dokumentation die Anwendung CourseManager als Ausgangspunkt verwenden, wird empfohlen, für diese exemplarische Vorgehensweise eine Kopie der Anwendung CourseManager zu verwenden, statt den ursprünglichen Code von CourseManager zu bearbeiten.

In dieser exemplarischen Vorgehensweise wird davon ausgegangen, dass Sie über grundlegende Kenntnisse in Visual Studio, .NET Framework und entweder Visual C#- oder Visual Basic-Programmierung verfügen.

Erstellen eines Funktionsimports

In dieser Prozedur erstellen Sie einen Function Import, der auf der gespeicherten Prozedur GetStudentGrades basiert, die im Speichermodell des EDM von CourseManager enthalten ist.

So erstellen Sie einen Funktionsimport

  1. Öffnen Sie die Projektmappe CourseManager in Visual Studio.

  2. Doppelklicken Sie im Projektmappen-Explorer auf die Datei School.edmx.

    Die Datei School.edmx wird im ADO.NET Entity Data Model-Designer (Entity Designer) geöffnet, und das Fenster Modellbrowser wird geöffnet.

  3. Erweitern Sie den EntityContainer: SchoolEntities-Knoten im Fenster Modellbrowser.

    Die Ordner Entitätenmengen, Zuordnungssätze und Funktionsimporte werden in der Strukturansicht angezeigt.

  4. Klicken Sie mit der rechten Maustaste auf Funktionsimporte, und wählen Sie Funktionsimport erstellen aus.

    Das Dialogfeld New Function Import wird geöffnet.

  5. Wählen Sie GetStudentGrades aus der Dropdownliste Name der gespeicherten Prozedur aus.

  6. Geben Sie GetStudentGrades in das Textfeld Name des Funktionsimports ein.

  7. Wählen Sie CourseGrade aus der Dropdownliste Rückgabetyp aus.

    NoteHinweis

    Der Rückgabetyp kann auf CourseGrade festgelegt werden, da die Spalten, die von der gespeicherten Prozedur GetStudentGrades zurückgegeben werden (EnrollementID und Grade), genau mit den skalaren Eigenschaften des Entitätstyps CourseGrade übereinstimmen.

  8. Klicken Sie auf OK.

    Der Function ImportGetStudentGrades wird dem EDM hinzugefügt.

Erstellen der Benutzeroberfläche

In dieser Prozedur fügen Sie der Anwendung CourseManager eine Benutzeroberfläche hinzu, sodass die Noten eines ausgewählten Studenten angezeigt werden können.

So erstellen Sie die Benutzeroberfläche

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das CourseManager-Projekt, zeigen Sie auf Hinzufügen, und wählen Sie die Option Neues Element aus.

    Das Dialogfeld Neues Element hinzufügen wird angezeigt.

  2. Wählen Sie Windows Form aus, legen Sie den Namen des Formulars auf GradeViewer.vb oder GradeViewer.cs fest, und klicken Sie auf Hinzufügen.

    Dem Projekt wird ein neues Formular hinzugefügt, und das Formular wird im Formular-Designer geöffnet. Der Name des Formulars wird auf GradeViewer festgelegt, und der Text wird auf GradeViewer festgelegt.

  3. Ziehen Sie ein ComboBox-Steuerelement von der Toolbox zum Formular, und legen Sie den Namen im Fenster Eigenschaften auf studentList fest.

  4. Ziehen Sie ein DataGridView-Steuerelement von der Toolbox zum Formular, und legen Sie den Namen im Fenster Eigenschaften auf gradeGridView fest.

  5. Doppelklicken Sie im Projektmappen-Explorer auf die Datei CourseViewer.vb oder CourseViewer.cs.

    Die Datei wird im Formular-Designer geöffnet.

  6. Ziehen Sie ein Button-Steuerelement in das Formular. Legen Sie den Namen auf viewGrades und den Text auf ViewGrades fest.

  7. Doppelklicken Sie auf das Button-Steuerelement viewGrades.

    Der viewGrades_Click-Ereignishandler wird zur CodeBehind-Datei hinzugefügt.

  8. Fügen Sie dem viewGrades_Click-Ereignishandler folgenden Code hinzu:

    Dim gradeViewer As New GradeViewer()
    gradeViewer.Visible = True
    
    GradeViewer gradeViewer = new GradeViewer();
    gradeViewer.Visible = true;
    

Die Benutzeroberfläche ist damit vollständig.

Abrufen von Entitätstypen mit einer gespeicherten Prozedur

In dieser Prozedur fügen Sie Code hinzu, mit dem der Function Import ausgeführt wird, den Sie zuvor mit der gespeicherten Prozedur GetStudentGrades erstellt haben. Der Code bindet dann die zurückgegebene EntityType-Auflistung an ein DataGridView-Steuerelement. Weitere Informationen über das Binden von Objekten an Steuerelemente finden Sie unter Binden von Objekten an Steuerelemente (Entity Framework).

So rufen Sie Entitätstypen mit einer gespeicherten Prozedur ab

  1. Doppelklicken Sie, während das GradeViewer-Formular im Formular-Designer geöffnet ist, auf den Hauptteil des Formulars.

    Die CodeBehind-Datei für das GradeViewer-Formular wird geöffnet.

  2. Fügen Sie die folgenden using (C#)- oder Imports (Visual Basic)-Anweisungen hinzu:

    Imports System.Data.Objects
    Imports System.Data.Objects.DataClasses
    
    using System.Data.Objects;
    using System.Data.Objects.DataClasses;
    
  3. Fügen Sie eine Eigenschaft zur GradeViewer-Klasse hinzu, die den Objektkontext darstellt:

    ' Create an ObjectContext instance based on SchoolEntity.
    Private schoolContext As SchoolEntities
    
    // Create an ObjectContext instance based on SchoolEntity.
    private SchoolEntities schoolContext;
    
  4. Fügen Sie im GradeViewer_Load-Ereignishandler den folgenden Code hinzu. Dieser Code initialisiert den Objektkontext und legt die Datenquelle für das ComboBox-Steuerelement auf eine Abfrage fest, die alle Person-Typen zurückgibt, deren EnrollmentDate nicht null ist.

    ' Initialize schoolContext.
    schoolContext = New SchoolEntities()
    
    ' Define the query to retrieve students.
    Dim studentQuery As ObjectQuery(Of Person) = schoolContext _
        .Person.Where("it.EnrollmentDate is not null") _
        .OrderBy("it.LastName")
    
    ' Execute and bind the studentList control to the query.
    studentList.DataSource = studentQuery _
        .Execute(MergeOption.OverwriteChanges)
    studentList.DisplayMember = "LastName"
    
    schoolContext = new SchoolEntities();
    
    // Define the query to retrieve students.
    ObjectQuery<Person> studentQuery = schoolContext.Person
        .Where("it.EnrollmentDate is not null")
        .OrderBy("it.LastName");
    
    // Execute and bind the studentList control to the query.
    studentList.DataSource = studentQuery
        .Execute(MergeOption.OverwriteChanges);
    studentList.DisplayMember = "LastName";
    
  5. Kehren Sie zur Entwurfsansicht des GradeViewer-Formulars zurück, und doppelklicken Sie auf das studentListComboBox-Steuerelement.

    Der studentList_SelectedIndexChanged-Ereignishandler wird zur CodeBehind-Datei hinzugefügt.

  6. Fügen Sie dem studentList_SelectedIndexChanged-Ereignishandler folgenden Code hinzu. Dieser Code führt den FunctionImportGetStudentGrades aus und bindet die Ergebnisse an das DataGridView-Steuerelement, wenn ein neuer Student aus der Dropdownliste ausgewählt wird.

    ' Get the selected student so we can use the
    ' PersonID in the function import call.
    Dim currentStudent As Person = CType(Me.studentList _
        .SelectedItem(), Person)
    
    ' Set the data source for the gradeGridView
    ' to the results returned by the GetStudentGrades
    ' Function Import.
    gradeGridView.DataSource = schoolContext _
        .GetStudentGrades(currentStudent.PersonID)
    
    // Get the selected student so we can use the
    // PersonID in the function import call.
    Person currentStudent = (Person)this.studentList
        .SelectedItem;
    
    // Set the data source for the gradeGridView
    // to the results returned by the GetStudentGrades
    // Function Import.
    gradeGridView.DataSource = schoolContext
        .GetStudentGrades(currentStudent.PersonID);
    

Drücken Sie STRG + F5, um die Anwendung auszuführen. Sie können die Informationen über die Noten der Studenten nun anzeigen, indem Sie auf View Grades klicken und einen Studenten aus der Dropdownliste im Grade Viewer-Formular auswählen.

Codelisting

Dieser Abschnitt enthält die endgültige Version der CodeBehind-Datei für das GradeViewer-Formular.

Imports System.Data.Objects
Imports System.Data.Objects.DataClasses
Public Class GradeViewer
    ' Create an ObjectContext instance based on SchoolEntity.
    Private schoolContext As SchoolEntities

    Private Sub GradeViewer_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load
        ' Initialize schoolContext.
        schoolContext = New SchoolEntities()

        ' Define the query to retrieve students.
        Dim studentQuery As ObjectQuery(Of Person) = schoolContext _
            .Person.Where("it.EnrollmentDate is not null") _
            .OrderBy("it.LastName")

        ' Execute and bind the studentList control to the query.
        studentList.DataSource = studentQuery _
            .Execute(MergeOption.OverwriteChanges)
        studentList.DisplayMember = "LastName"
    End Sub

    Private Sub studentList_SelectedIndexChanged(ByVal sender As  _
        System.Object, ByVal e As System.EventArgs) Handles _
        studentList.SelectedIndexChanged
        ' Get the selected student so we can use the
        ' PersonID in the function import call.
        Dim currentStudent As Person = CType(Me.studentList _
            .SelectedItem(), Person)

        ' Set the data source for the gradeGridView
        ' to the results returned by the GetStudentGrades
        ' Function Import.
        gradeGridView.DataSource = schoolContext _
            .GetStudentGrades(currentStudent.PersonID)
    End Sub
End Class
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.Objects;
using System.Data.Objects.DataClasses;

namespace CourseManager
{
    public partial class GradeViewer : Form
    {
        // Create an ObjectContext instance based on SchoolEntity.
        private SchoolEntities schoolContext;

        public GradeViewer()
        {
            InitializeComponent();
        }

        private void GradeViewer_Load(object sender, EventArgs e)
        {
            schoolContext = new SchoolEntities();

            // Define the query to retrieve students.
            ObjectQuery<Person> studentQuery = schoolContext.Person
                .Where("it.EnrollmentDate is not null")
                .OrderBy("it.LastName");

            // Execute and bind the studentList control to the query.
            studentList.DataSource = studentQuery
                .Execute(MergeOption.OverwriteChanges);
            studentList.DisplayMember = "LastName";
        }

        private void studentList_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Get the selected student so we can use the
            // PersonID in the function import call.
            Person currentStudent = (Person)this.studentList
                .SelectedItem;

            // Set the data source for the gradeGridView
            // to the results returned by the GetStudentGrades
            // Function Import.
            gradeGridView.DataSource = schoolContext
                .GetStudentGrades(currentStudent.PersonID);
        }
    }
}

Nächste Schritte

Sie haben erfolgreich einen Function Import erstellt, der eine Auflistung von Entitätstypen abruft. Weitere Informationen über Unterstützung für gespeicherte Prozeduren im Entity Framework finden Sie unter Unterstützung für gespeicherte Prozeduren (Entity Framework). Weitere Informationen über das Erstellen von Anwendungen, die das Entity Framework verwenden, finden Sie unter Programmierhandbuch (Entity Framework).

Siehe auch

Weitere Ressourcen

Szenarios für den ADO.NET Entity Data Model-Designer
Aufgaben der Entity Data Model-Tools