Exemplarische Vorgehensweise: Zuordnen von Vererbung - 'Tabelle pro Hierarchie' (Entity Data Model-Tools)

In diesem Thema wird dargestellt, wie die "Tabelle pro Hierarchie"-Vererbung durch Ändern des konzeptionellen Modells in einer EDMX-Datei definiert wird. Die "Tabelle pro Hierarchie"-Vererbung verwendet eine Datenbanktabelle, um die Daten aller Entitätstypen in einer Vererbungshierarchie zu verwalten.

In dieser exemplarischen Vorgehensweise implementieren Sie die "Tabelle pro Hierarchie"-Vererbung, indem Sie das in der CourseManager-Anwendung (weitere Informationen finden Sie im Abschnitt "Erforderliche Komponenten" weiter unten in diesem Thema) verwendete konzeptionelle Modell ändern.

Im konzeptionellen CourseManager-Modell verfügt der Person-Entitätstyp über zwei Eigenschaften, HireDate und EnrollmentDate, die zu neuen, von Person erbenden Entitätstypen (Instructor bzw. Student) gehören können. In den folgenden Schritten wird zusammengefasst, wie die "Tabelle pro Hierarchie"-Vererbung in diesem Fall implementiert wird. Die Verfahren in dieser exemplarischen Vorgehensweise bieten weitergehende Informationen.

  1. Erstellen Sie zwei neue Entitätstypen, Instructor und Student.

  2. Legen Sie den Basistyp für jeden neuen Entitätstyp auf Person fest.

  3. Verschieben Sie die HireDate-Eigenschaft von Person nach Instructor, und verschieben Sie die EnrollmentDate-Eigenschaft von Person nach Student.

  4. Machen Sie den Person-Entitätstyp zu einem abstrakten Typ.

  5. Ordnen Sie der Tabelle Person den Instructor-Entitätstyp mit zwei Bedingungen zu: HireDate Is Not Null und EnrollmentDate Is Null.

  6. Ordnen Sie der Tabelle Person den Student-Entitätstyp mit zwei Bedingungen zu: EnrollmentDate Is Not Null und HireDate Is Null.

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, implementieren Sie die "Tabelle pro Hierarchie"-Vererbung, indem Sie das konzeptionelle Modell und die Zuordnungen ändern. Erweitern Sie dann die Funktionalität der Anwendung, um die Registrierung für einen ausgewählten Kurs anzuzeigen.

Cc716683.note(de-de,VS.100).gifHinweis:
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 und nicht 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 in der Visual C#- oder Visual Basic-Programmierung verfügen.

Implementieren der 'Tabelle pro Hierarchie'-Vererbung

In diesem Verfahren ändern Sie das SchoolModel, um die "Tabelle pro Hierarchie"-Vererbung zu implementieren. Eine Videopräsentation des folgenden Verfahrens finden Sie unter How.

So implementieren Sie die 'Tabelle pro Hierarchie'-Vererbung

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

  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.

  3. Klicken Sie mit der rechten Maustaste auf einen leeren Bereich der Entwurfsoberfläche des Entity Designers, zeigen Sie mit dem Mauszeiger auf Hinzufügen, und klicken Sie auf Entität.

    Das Dialogfeld Neue Entität wird angezeigt.

  4. Geben Sie Instructor als Entitätsnamen ein, und wählen Sie in der Dropdownliste Person als Basistyp aus.

  5. Klicken Sie auf OK.

    Auf der Entwurfsoberfläche wird ein neuer Entitätstyp erstellt und angezeigt.

  6. Wiederholen Sie die Schritte 3 bis 5, geben Sie jedoch im zweiten Schritt Student für den Entitätsnamen ein.

    Sie haben nun zwei neue Entitätstypen, Instructor und Student, die auf der Entwurfsoberfläche angezeigt werden. Pfeile zeigen von den neuen Entitätstypen auf den Person-Entitätstyp. Dadurch wird angezeigt, dass Person der Basistyp der neuen Entitätstypen ist.

  7. Klicken Sie mit der rechten Maustaste auf die HireDate-Eigenschaft (unter Skalareigenschaften) des Person-Entitätstyps. Wählen Sie Ausschneiden aus.

  8. Klicken Sie mit der rechten Maustaste auf Skalareigenschaften des Instructor-Entitätstyps, und wählen Sie Einfügen aus.

  9. Klicken Sie mit der rechten Maustaste auf die HireDate-Eigenschaft, und wählen Sie Eigenschaften aus.

  10. Legen Sie im Fenster Eigenschaften die Eigenschaft NULL-Werte zulassen auf false fest.

  11. Wiederholen Sie die Schritte 7 bis 10, schneiden Sie jedoch die EnrollmentDate-Eigenschaft des Person-Entitätstyps aus, und fügen Sie diese in den Student-Entitätstyp ein.

  12. Wählen Sie den Person-Entitätstyp aus. Legen Sie im Fenster Eigenschaften seine Abstrakt-Eigenschaft auf true fest.

    Sie müssen im Allgemeinen keine abstrakten Typen zum Modellieren von "Tabelle pro Hierarchie"-Szenarien verwenden. In diesem Beispiel werden abstrakte Typen verwendet, um ihre Verwendung in einem konzeptionellen Modell zu veranschaulichen.

    Cc716683.note(de-de,VS.100).gifHinweis:
    Für die verbleibenden Schritte in diesem Verfahren wird das Fenster Mappingdetails benötigt.Wenn dieses Fenster nicht angezeigt wird, klicken Sie mit der rechten Maustaste auf die Entwurfsoberfläche und wählen Mappingdetails aus.

  13. Wählen Sie den Instructor-Entitätstyp aus, und klicken Sie im Fenster Mappingdetails auf <Tabelle oder Sicht hinzufügen>.

    Das Feld <Tabelle oder Sicht hinzufügen> wird zu einer Dropdownliste von Tabellen oder Sichten, denen die ausgewählte Entität zugeordnet werden kann.

  14. Wählen Sie in der Dropdownliste den Eintrag Person aus.

    Das Fenster Mappingdetails wird durch Standardspaltenmappings und eine Option zum Hinzufügen einer Bedingung aktualisiert.

  15. Klicken Sie auf <Bedingung hinzufügen>.

    Das Feld <Bedingung hinzufügen> wird zu einer Dropdownliste von Spalten, für die Bedingungen festgelegt werden können.

  16. Wählen Sie in der Dropdownliste den Eintrag HireDate aus.

    Ein weiteres Feld <Bedingung hinzufügen> wird angezeigt.

  17. Wählen Sie im Fenster Mappingdetails in der Spalte Operator in der Dropdownliste den Eintrag Ist aus.

  18. Wählen Sie in der Spalte Eigenschaft/Wert den Eintrag Nicht Null aus.

  19. Klicken Sie auf <Bedingung hinzufügen>.

  20. Wählen Sie in der Dropdownliste den Eintrag EnrollmentDate aus.

  21. Wählen Sie in der Spalte Operator in der Dropdownliste den Eintrag Ist aus.

  22. Wählen Sie in der Spalte Eigenschaft/Wert den Eintrag Null aus.

    Cc716683.note(de-de,VS.100).gifHinweis:
    Wenn ein Wert bzw. eine Eigenschaft in einer Bedingung verwendet wird, kann er bzw. sie nicht auch eine Entitätseigenschaft sein, es sei denn, in der Bedingung wird ein Ist Null-Vergleich oder ein Ist nicht Null-Vergleich verwendet.

  23. Wiederholen Sie die Schritte 13 bis 22 für den Student-Entitätstyp, verwenden Sie jedoch die Bedingungen HireDate Is Null und EnrollmentDate Is Not Null.

Die "Tabelle pro Hierarchie"-Vererbung ist jetzt implementiert.

Erstellen einer Zuordnung zwischen Instructor und OfficeAssignment

In diesem Abschnitt ändern Sie die Zuordnung zwischen Person und OfficeAssignment, damit sie sich zwischen Instructor und OfficeAssignment befindet. Die Zuordnung auf diese Weise zu ändern, ist mit der Absicht des Modells konsistent.

So erstellen Sie eine Zuordnung zwischen Instructor und OfficeAssignment

  1. Klicken Sie mit der rechten Maustaste auf die Zuordnung zwischen Person und OfficeAssignment, und wählen Sie Löschen aus.

  2. Klicken Sie mit der rechten Maustaste auf einen leeren Bereich der Entwurfsoberfläche des Entity Designers, zeigen Sie auf Hinzufügen, und klicken Sie auf Zuordnung.

  3. Wählen Sie für ein Ende der Zuordnung Instructor aus der Dropdownliste Entität aus, und wählen Sie 1 (Eins) aus der Dropdownliste Multiplizität aus.

  4. Wählen Sie für das andere Ende der Zuordnung OfficeAssignment aus der Dropdownliste Entität aus, und wählen Sie 0..1 (Null oder Eins) aus der Dropdownliste Multiplizität aus.

  5. Klicken Sie auf OK.

  6. Klicken Sie mit der rechten Maustaste auf die neue Zuordnung zwischen Instructor und OfficeAssignment, und wählen Sie Eigenschaften aus.

  7. Klicken Sie im Eigenschaftenfenster auf Referenzielle Einschränkung, und klicken Sie dann auf die Schaltfläche mit dem Auslassungszeichen (…), die in der Wertespalte angezeigt wird.

    Das Dialogfeld Referenzielle Einschränkung wird angezeigt.

  8. Wählen Sie im Dropdown-Listenfeld Prinzipal den Eintrag Instructor aus.

  9. Klicken Sie auf OK.

Sie haben jetzt eine Zuordnung zwischen Instructor und OfficeAssignment hinzugefügt.

Erstellen der Benutzeroberfläche

Fügen Sie nun dem CourseViewer-Formular eine Schaltfläche hinzu, mit der das Enrollment-Formular geladen und angezeigt werden kann. Dann fügen Sie dem Enrollment-Formular zwei ComboBox-Steuerelemente und ein ListBox-Steuerelement hinzu. Mit der ersten ComboBox können Sie eine Abteilung auswählen. Mit der zweiten ComboBox können Sie auf der Basis der in der ersten ComboBox ausgewählten Abteilung einen Kurs auswählen. Eine Liste von Teilnehmern und Kursleitern für den ausgewählten Kurs wird im ListBox-Steuerelement angezeigt.

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, geben Sie dem Formular den Namen Enrollment.vb oder Enrollment.cs (je nachdem, welche Programmiersprache Sie verwenden), und klicken Sie auf Hinzufügen.

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

  3. Ziehen Sie ein ComboBox-Steuerelement von der Toolbox auf das Formular, und legen Sie im Fenster Eigenschaften seinen Namen auf departmentList fest.

  4. Ziehen Sie ein weiteres ComboBox-Steuerelement auf das Formular, und legen Sie seinen Namen auf courseList fest.

  5. Ziehen Sie ein Listbox-Steuerelement von der Toolbox auf das Formular. Legen Sie im Fenster Eigenschaften den Namen des Listenfelds auf studentList fest.

  6. Doppelklicken Sie im Projektmappen-Explorer auf CourseViewer.cs oder CourseViewer.vb.

    Es wird die Entwurfsansicht des CourseViewer-Formulars angezeigt.

  7. Ziehen Sie ein Button-Steuerelement von der Toolbox auf das Formular CourseViewer.

  8. Legen Sie im Fenster Eigenschaften den Namen der Schaltfläche auf viewEnrollment und den Text der Schaltfläche auf View Enrollment fest.

  9. Doppelklicken Sie auf die viewEnrollment-Schaltfläche.

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

  10. Fügen Sie dem viewEnrollment_click-Ereignishandler folgenden Code hinzu:

    Dim enrollmentForm As New Enrollment()
    enrollmentForm.Visible = True
    
    Enrollment enrollmentForm = new Enrollment();
    enrollmentForm.Visible = true;
    

Die Benutzeroberfläche ist damit vollständig.

Abfragen des konzeptionellen Modells

In diesem Verfahren fragen Sie das konzeptionelle Modell ab und binden die Ergebnisse an Windows Forms-Steuerelemente. Weitere Informationen über das Binden von Objekten an Steuerelemente finden Sie unter Binding Objects to Controls (Entity Framework).

So fragen Sie das konzeptionelle Modell ab

  1. Doppelklicken Sie auf das Enrollment-Formular, während das Enrollment-Formular im Formular-Designer angezeigt wird.

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

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

    Imports System.Data.Objects
    Imports System.Data.Objects.DataClasses
    
    using System.Data.Objects;
    using System.Data.Objects.DataClasses;
    
  3. Fügen Sie der Enrollment-Klasse eine Eigenschaft hinzu, die den Datenkontext darstellt:

    ' Create an ObjectContext instance based on SchoolEntity.
    Private schoolContext As SchoolEntities
    
    // Create an ObjectContext instance based on SchoolEntities.
    private SchoolEntities schoolContext;
    
  4. Fügen Sie dem Enrollment_Load-Ereignishandler Code zur Initialisierung des Objektkontexts hinzu, und binden Sie das ComboBox-Steuerelement an eine Abfrage, die alle Abteilungen und die verknüpften Kursinformationen zurückgibt.

          ' Initialize the ObjectContext.
          schoolContext = New SchoolEntities()
    
          ' Define a query that returns all Department objects and 
          ' related Course objects, ordered by name.
          Dim departmentQuery As ObjectQuery(Of Department) = _
              schoolContext.Departments.Include("Courses") _
              .OrderBy("it.Name")
    
          ' Bind the ComboBox control to the query, which is 
          ' executed during data binding.
          Me.departmentList.DataSource = departmentQuery _
    .Execute(MergeOption.OverwriteChanges)
          Me.departmentList.DisplayMember = "Name"
    
    // Initialize the ObjectContext.
    schoolContext = new SchoolEntities();
    
    // Define a query that returns all Department objects
    // and related Course objects, ordered by name.
    ObjectQuery<Department> departmentQuery =
        schoolContext.Departments.Include("Courses")
                                .OrderBy("it.Name");
    
    // Bind the ComboBox control to the query.
    this.departmentList.DataSource = departmentQuery
        .Execute(MergeOption.OverwriteChanges);
    this.departmentList.DisplayMember = "Name";
    
  5. Kehren Sie zur Entwurfsansicht des Enrollment-Formulars zurück, und doppelklicken Sie auf das ComboBox-Steuerelement departmentList.

    Der departmentList_SelectedIndexChanged-Ereignishandler wird in der CodeBehind-Datei erstellt.

  6. Fügen Sie dem Ereignishandler Code hinzu, um das ComboBox-Steuerelement courseList an die Course-Eigenschaften der ausgewählten Department zu binden.

    ' Get the object for the selected department
    Dim department As Department = CType(Me.departmentList _
            .SelectedItem, Department)
    
    ' Bind the ComboBox control Course properties of
    ' the selected Department.
    courseList.DataSource = department.Courses
    courseList.DisplayMember = "Title"
    
    // Get the object for the selected department.
    Department department =
            (Department)this.departmentList.SelectedItem;
    
    // Bind the ComboBox control to the Course  
    // properties of the selected Department.
    courseList.DataSource = department.Courses;
    courseList.DisplayMember = "Title";
    
  7. Kehren Sie zur Entwurfsansicht des Enrollment-Formulars zurück, und doppelklicken Sie auf das ComboBox-Steuerelement courseList.

    Der courseList_SelectedIndexChanged-Ereignishandler wird in der CodeBehind-Datei erstellt.

  8. Fügen Sie dem Ereignishandler Code hinzu, um in der ListBox eine Liste von Teilnehmern anzuzeigen.

    Me.studentList.Items.Clear()
    
    ' Get the CourseID from the selected Course.
    Dim course As Course = CType(Me.courseList.SelectedItem,  _
         Course)
    Dim courseId As Integer = course.CourseID
    
    ' Get all StudentGrade objects for the supplied CourseID
    Dim studentQuery As Course = schoolContext.Courses.Where _
         ("it.CourseID = @courseID", New ObjectParameter _
          ("courseID", courseId)).Include("StudentGrades"). _
          FirstOrDefault()
    
    ' Get all students for each StudentGrade
    For Each cg As StudentGrade In studentQuery.StudentGrades
        cg.PersonReference.Load()
        studentList.Items.Add(cg.Person.LastName + ", " + _
                            cg.Person.FirstName)
    Next
    
    studentList.Items.Add(" ")
    
    ' Get all Instructor types for the supplied CourseID
    Dim instructorQuery As Course = schoolContext.Courses. _
         Where("it.CourseID = @courseID", New ObjectParameter _
               ("courseID", courseId)).Include("People") _
               .FirstOrDefault()
    
    ' Display each instructor for the specified Course
    For Each Instructor As Instructor In instructorQuery.People
        Me.studentList.Items.Add("Instructor: " + Instructor. _
                        LastName + ", " + Instructor.FirstName)
    Next
    
    studentList.Items.Clear();
    
    // Get the CourseID from the selected Course.
    Course course = (Course)courseList.SelectedItem;
    int courseId = course.CourseID;
    
    // Get all StudentGrade types for the supplied CourseID
    Course studentQuery = schoolContext.Courses.Where(
        "it.CourseID = @courseID", new ObjectParameter
            ("courseID", courseId)).Include("StudentGrades").
            FirstOrDefault();
    
    // Get all students for each StudentGrade
    foreach (StudentGrade sg in studentQuery.StudentGrades)
    {
        sg.PersonReference.Load();
        studentList.Items.Add(sg.Person.LastName + ", " +
            sg.Person.FirstName);
    }
    
    studentList.Items.Add(" ");
    
    // Get all Instructor types for the supplied CourseID
    Course instructorQuery = schoolContext.Courses.Where(
        "it.CourseID = @courseID", new ObjectParameter
            ("courseID", courseId)).Include("People").
            FirstOrDefault();
    
    // Display each instructor for the specified course.
    foreach (Instructor instructor in instructorQuery.People.
        OfType<Instructor>())
    {
        studentList.Items.Add("Instructor: " + instructor.
            LastName + ", " + instructor.FirstName);
    }
    

Die Anwendung ist jetzt fertig gestellt. Drücken Sie STRG+F5, um die Anwendung auszuführen. Klicken Sie auf die Schaltfläche View Enrollment, um das Enrollment-Formular zu laden. Im ListBox werden Kursregistrierungen und Kursleiter für den ausgewählten Kurs angezeigt.

Codelisting

In diesem Abschnitt wird die endgültige Version der CodeBehind-Datei für das Enrollment-Formular aufgeführt.

Imports System.Data.Objects
Imports System.Data.Objects.DataClasses

Public Class Enrollment

    ' Create an ObjectContext instance based on SchoolEntity.
    Private schoolContext As SchoolEntities

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

        ' Define a query that returns all Department objects and 
        ' related Course objects, ordered by name.
        Dim departmentQuery As ObjectQuery(Of Department) = _
            schoolContext.Departments.Include("Courses") _
            .OrderBy("it.Name")

        ' Bind the ComboBox control to the query, which is 
        ' executed during data binding.
        Me.departmentList.DataSource = departmentQuery _
  .Execute(MergeOption.OverwriteChanges)
        Me.departmentList.DisplayMember = "Name"
    End Sub

    Private Sub departmentList_SelectedIndexChanged(ByVal sender _
            As System.Object, ByVal e As System.EventArgs) Handles _
            departmentList.SelectedIndexChanged
        ' Get the object for the selected department
        Dim department As Department = CType(Me.departmentList _
                .SelectedItem, Department)

        ' Bind the ComboBox control Course properties of
        ' the selected Department.
        courseList.DataSource = department.Courses
        courseList.DisplayMember = "Title"
    End Sub

    Private Sub courseList_SelectedIndexChanged(ByVal sender As  _
            System.Object, ByVal e As System.EventArgs) Handles _
            courseList.SelectedIndexChanged
        Me.studentList.Items.Clear()

        ' Get the CourseID from the selected Course.
        Dim course As Course = CType(Me.courseList.SelectedItem,  _
             Course)
        Dim courseId As Integer = course.CourseID

        ' Get all StudentGrade objects for the supplied CourseID
        Dim studentQuery As Course = schoolContext.Courses.Where _
             ("it.CourseID = @courseID", New ObjectParameter _
              ("courseID", courseId)).Include("StudentGrades"). _
              FirstOrDefault()

        ' Get all students for each StudentGrade
        For Each cg As StudentGrade In studentQuery.StudentGrades
            cg.PersonReference.Load()
            studentList.Items.Add(cg.Person.LastName + ", " + _
                                cg.Person.FirstName)
        Next

        studentList.Items.Add(" ")

        ' Get all Instructor types for the supplied CourseID
        Dim instructorQuery As Course = schoolContext.Courses. _
             Where("it.CourseID = @courseID", New ObjectParameter _
                   ("courseID", courseId)).Include("People") _
                   .FirstOrDefault()

        ' Display each instructor for the specified Course
        For Each Instructor As Instructor In instructorQuery.People
            Me.studentList.Items.Add("Instructor: " + Instructor. _
                            LastName + ", " + Instructor.FirstName)
        Next
    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 Enrollment : Form
    {
        // Create an ObjectContext instance based on SchoolEntities.
        private SchoolEntities schoolContext;

        public Enrollment()
        {
            InitializeComponent();
        }

        private void Enrollment_Load(object sender, EventArgs e)
        {
            // Initialize the ObjectContext.
            schoolContext = new SchoolEntities();

            // Define a query that returns all Department objects
            // and related Course objects, ordered by name.
            ObjectQuery<Department> departmentQuery =
                schoolContext.Departments.Include("Courses")
                                        .OrderBy("it.Name");

            // Bind the ComboBox control to the query.
            this.departmentList.DataSource = departmentQuery
                .Execute(MergeOption.OverwriteChanges);
            this.departmentList.DisplayMember = "Name";
        }

        private void departmentList_SelectedIndexChanged(object sender,
            EventArgs e)
        {
            // Get the object for the selected department.
            Department department =
                    (Department)this.departmentList.SelectedItem;

            // Bind the ComboBox control to the Course  
            // properties of the selected Department.
            courseList.DataSource = department.Courses;
            courseList.DisplayMember = "Title";
        }

        private void courseList_SelectedIndexChanged(object sender,
            EventArgs e)
        {
            studentList.Items.Clear();

            // Get the CourseID from the selected Course.
            Course course = (Course)courseList.SelectedItem;
            int courseId = course.CourseID;

            // Get all StudentGrade types for the supplied CourseID
            Course studentQuery = schoolContext.Courses.Where(
                "it.CourseID = @courseID", new ObjectParameter
                    ("courseID", courseId)).Include("StudentGrades").
                    FirstOrDefault();

            // Get all students for each StudentGrade
            foreach (StudentGrade sg in studentQuery.StudentGrades)
            {
                sg.PersonReference.Load();
                studentList.Items.Add(sg.Person.LastName + ", " +
                    sg.Person.FirstName);
            }

            studentList.Items.Add(" ");

            // Get all Instructor types for the supplied CourseID
            Course instructorQuery = schoolContext.Courses.Where(
                "it.CourseID = @courseID", new ObjectParameter
                    ("courseID", courseId)).Include("People").
                    FirstOrDefault();

            // Display each instructor for the specified course.
            foreach (Instructor instructor in instructorQuery.People.
                OfType<Instructor>())
            {
                studentList.Items.Add("Instructor: " + instructor.
                    LastName + ", " + instructor.FirstName);
            }
        }
    }
}

Nächste Schritte

Sie haben die "Tabelle pro Hierarchie"-Vererbung erfolgreich in einem konzeptionellen Modell implementiert. Weitere Informationen zum Definieren eines konzeptionellen Modells mit "Tabelle pro Hierarchie"-Vererbung finden Sie unter How to: Define a Model with Table-per-Hierarchy Inheritance. Weitere Informationen zum Erstellen von Anwendungen mit Entity Framework finden Sie unter ADO.NET Entity Framework.

Siehe auch

Weitere Ressourcen

Szenarien für die Verwendung der Entity Data Model-Tools
Aufgaben der Entity Data Model-Tools