Gewusst wie: Objekte mit 'Tabelle pro Typ'-Vererbung (Entity Framework)

In diesem Thema wird gezeigt, wie mithilfe des OfType-Operators eine polymorphe Abfrage ausgeführt wird.

So führen Sie den Code in diesem Beispiel aus

  1. Fügen Sie dem Projekt das Modell "School" hinzu, und konfigurieren Sie das Projekt für die Verwendung von Entity Framework . Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Entity Data Model-Assistenten (Entity Framework).

  2. Führen Sie die in Walkthrough: Mapping Inheritance - Table per Type angegebenen Schritte aus, um das konzeptionelle Modell so zu ändern, dass es eine 'Tabelle pro Typ'-Vererbung enthält.

Beispiel

Im folgenden Beispiel wird die OfType-Methode verwendet, um eine Auflistung von OnsiteCourses und eine Auflistung von OnlineCourses aus einer Auflistung von Courses abzurufen und anzuzeigen. OnsiteCourses und OnlineCourses sind spezielle Typen von Courses.

Try
    Using context As New SchoolEntities()
        Dim departmentID = 7
        ' Get courses for the department with id 7. 
        Dim courses As IQueryable(Of Course) = _
            context.Departments.Where(Function(d) d.DepartmentID = departmentID).SelectMany(Function(d) d.Courses)

        Console.WriteLine("All the courses for the selected department.")
        For Each course As Course In courses

            Console.WriteLine("CourseID: {0} ", course.CourseID)
        Next
        Dim onlineCourses = courses.OfType(Of OnlineCourse)()
        Console.WriteLine("Online courses only for the selected department.")
        For Each onlineCourse As OnlineCourse In onlineCourses

            Console.WriteLine("CourseID: {0} ", onlineCourse.CourseID)
        Next
        Dim onsiteCourses = courses.OfType(Of OnsiteCourse)()
        Console.WriteLine("Onsite courses only for the selected department.")
        For Each onsite As OnsiteCourse In onsiteCourses

            Console.WriteLine("CourseID: {0} ", onsite.CourseID)
        Next

    End Using
Catch e As System.Data.MappingException
    Console.WriteLine(e.ToString())
Catch e As System.Data.EntityException
    Console.WriteLine(e.ToString())
End Try
try
{
    using (SchoolEntities context =
                          new SchoolEntities())
    {
        int departmentID = 7;
        // Get courses for the department with id 7.
        IQueryable<Course> courses = context.Departments
                .Where(d => d.DepartmentID == departmentID)
                .SelectMany(d => d.Courses);

        Console.WriteLine("All the courses for the selected department.");
        foreach (Course course in courses)
        {
            Console.WriteLine("CourseID: {0} ", course.CourseID);

        }
        var onlineCourses = courses.OfType<OnlineCourse>();
        Console.WriteLine("Online courses only for the selected department.");
        foreach (OnlineCourse onlineCourse in onlineCourses)
        {
            Console.WriteLine("CourseID: {0} ", onlineCourse.CourseID);

        }
        var onsiteCourses = courses.OfType<OnsiteCourse>();
        Console.WriteLine("Onsite courses only for the selected department.");
        foreach (OnsiteCourse onsite in onsiteCourses)
        {
            Console.WriteLine("CourseID: {0} ", onsite.CourseID);

        }
    }

}
catch (System.Data.MappingException e)
{
    Console.WriteLine(e.ToString());
}
catch (System.Data.EntityException e)
{
    Console.WriteLine(e.ToString());
}

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Modells mit einer 'Tabelle pro Typ'-Vererbung (Entity Framework)

Weitere Ressourcen

Definieren von erweiterten Datenmodellen (Entity Framework-Aufgaben)