Cómo ejecutar una consulta polimórfica (EntityClient)

En este tema se muestra cómo ejecutar una consulta de Entity SQL polimórfica usando el operador OFTYPE (Entity SQL).

Para ejecutar el código de este ejemplo

  1. Agregue el Modelo School al proyecto y configúrelo para usar Entity Framework. Para obtener más información, vea Cómo usar el Asistente para Entity Data Model (Entity Framework).

  2. En la página de código de la aplicación, agregue las instrucciones using siguientes (Imports en Visual Basic):

    Imports System
    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
    
    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;
    
  3. Modifique el modelo conceptual para que tenga una herencia de tabla por jerarquía siguiendo los pasos descritos en Walkthrough: Mapping Inheritance - Table per Hierarchy.

Ejemplo

En el ejemplo siguiente se usa un operador OFTYPE para obtener y mostrar una colección únicamente de OnsiteCourses a partir de una colección de Courses.

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
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"]);
            }
        }
    }
}

Vea también

Conceptos

Proveedor de EntityClient para Entity Framework
Lenguaje Entity SQL