方法: ポリモーフィック クエリを実行するHow to: Execute a Polymorphic Query

このトピックでは、OFTYPE 演算子を使ってポリモーフィックな Entity SQLEntity SQL クエリを実行する方法について説明します。This topic shows how to execute a polymorphic Entity SQLEntity SQL query using the OFTYPE operator.

この例のコードを実行するにはTo run the code in this example

  1. School モデルをプロジェクトに追加し、Entity Framework が使用されるようにプロジェクトを構成します。Add the School Model to your project and configure your project to use the Entity Framework. 詳細については、Entity Data Model ウィザードを使用する」を参照してください。For more information, see How to: Use the Entity Data Model Wizard.

  2. アプリケーションのコード ページで、次の using ステートメント (Visual Basic の場合は Imports) を追加します。In the code page for your application, add the following using statements (Imports in Visual Basic):

    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. 概念モデルを変更して、Table-Per-Hierarchy 継承を持つようにします。そのためには、「チュートリアル:Table-Per-Hierarchy 継承のマッピング」で説明されている手順に従います。Modify the conceptual model to have a table-per-hierarchy inheritance by following the steps in Walkthrough: Mapping Inheritance - Table-per-Hierarchy.

Example

次の例では、OFTYPE 演算子を使用し、OnsiteCourses のコレクションから Courses のコレクションだけを取得して表示します。The following example uses an OFTYPE operator to get and display a collection of only OnsiteCourses from a collection of Courses.

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

関連項目See also