Vorgehensweise: Ausführen einer polymorphen Abfrage

In diesem Thema ist dargestellt, wie eine polymorphe Entity SQL-Abfrage mithilfe des OFTYPE-Operators 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.

  2. Fügen Sie der Codepage Ihrer Anwendung die folgenden using-Anweisungen (Imports in Visual Basic) hinzu:

    using System;
    using System.Collections.Generic;
    using System.Collections;
    using System.Data.Common;
    using System.Data;
    using System.IO;
    using System.Data.SqlClient;
    using System.Data.EntityClient;
    using System.Data.Metadata.Edm;
    
    Imports System.Collections.Generic
    Imports System.Collections
    Imports System.Data.Common
    Imports System.Data
    Imports System.IO
    Imports System.Data.SqlClient
    Imports System.Data.EntityClient
    Imports System.Data.Metadata.Edm
    
    
  3. Ändern Sie das konzeptionelle Modell so, dass eine Vererbung pro Hierarchie erfolgt, indem Sie die Schritte in Walkthrough: Mapping Inheritance - Table-per-Hierarchy ausführen.

Beispiel

Im folgenden Beispiel wird ein OFTYPE-Operator verwendet, um eine Auflistung der OnsiteCourses aus einer Auflistung von Courses abzurufen und anzuzeigen.

using (EntityConnection conn = new EntityConnection("name=SchoolEntities"))
{
    conn.Open();
    // Create a query that specifies to
    // get a collection of only OnsiteCourses.

    string esqlQuery = @"SELECT VAlUE onsiteCourse FROM
        OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse)
        AS onsiteCourse";
    using (EntityCommand cmd = new EntityCommand(esqlQuery, conn))
    {
        // Execute the command.
        using (DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess))
        {
            // Start reading.
            while (rdr.Read())
            {
                // Display OnsiteCourse's location.
                Console.WriteLine("CourseID: {0} ", rdr["CourseID"]);
                Console.WriteLine("Location: {0} ", rdr["Location"]);
            }
        }
    }
}
Using conn As New EntityConnection("name=SchoolEntities")
    conn.Open()
    ' Create a query that specifies to 
    ' get a collection of only OnsiteCourses. 

    Dim esqlQuery As String = "SELECT VAlUE onsiteCourse FROM " & _
        "OFTYPE(SchoolEntities.Courses, SchoolModel.OnsiteCourse) AS onsiteCourse"
    Using cmd As New EntityCommand(esqlQuery, conn)
        ' Execute the command. 
        Using rdr As DbDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
            ' Start reading. 
            While rdr.Read()
                ' Display OnsiteCourse's location. 
                Console.WriteLine("CourseID: {0} ", rdr("CourseID"))
                Console.WriteLine("Location: {0} ", rdr("Location"))
            End While
        End Using
    End Using
End Using

Siehe auch