다음을 통해 공유


방법: 중첩 컬렉션을 반환하는 쿼리 실행(EntityClient)

이 항목에서는 EntityCommand를 사용하여 엔터티 데이터 모델에 대해 명령을 실행하는 방법 및 EntityDataReader를 사용하여 중첩 컬렉션 결과를 검색하는 방법의 예제를 제공합니다.

이 예제의 코드를 실행하려면

  1. 프로젝트에 AdventureWorks Sales 모델을 추가하고 Entity Framework를 사용하도록 프로젝트를 구성합니다. 이렇게 하려면 다음 중 하나를 수행합니다.

  2. 응용 프로그램의 코드 페이지에서 다음 using 문(Visual Basic에서는 Imports)을 추가합니다.

    Imports System
    Imports System.Collections.Generic
    Imports System.Collections
    Imports System.Data.Common
    Imports System.Data
    Imports System.Data.SqlClient
    Imports System.Data.EntityClient
    Imports System.Data.Metadata.Edm
    Imports System.IO
    ' Add AdventureWorksModel prepended with the root namespace for the project.
    'Imports ProjectName.AdventureWorksModel
    
    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 AdventureWorksModel;
    using System.Data.Metadata.Edm;
    

예제

중첩 컬렉션은 다른 컬렉션 내에 있는 컬렉션입니다. 다음 코드에서는 Contacts 컬렉션과 각 Contact와 연결된 SalesOrderHeaders의 중첩 컬렉션을 검색합니다.

Using conn As EntityConnection = New EntityConnection("name=AdventureWorksEntities")
    conn.Open()
    Try
        ' Create an EntityCommand.
        Using cmd As EntityCommand = conn.CreateCommand()

            ' Create a nested query.
            Dim esqlQuery As String = "Select c.ContactID, c.SalesOrderHeader " & _
                    "From AdventureWorksEntities.Contact as c"

            cmd.CommandText = esqlQuery
            ' Execute the command.
            Using rdr As EntityDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)
                ' The result returned by this query contains 
                ' ContactID and a nested collection of SalesOrderHeader items.
                ' associated with this Contact.
                Do While rdr.Read
                    ' the first column contains Contact ID.
                    Console.WriteLine("Contact ID: {0}", rdr.Item("ContactID"))

                    ' The second column contains a collection of SalesOrderHeader 
                    ' items associated with the Contact.
                    Dim nestedReader As DbDataReader = rdr.GetDataReader(1)
                    Do While nestedReader.Read
                        Console.WriteLine("   SalesOrderID: {0} ", nestedReader.Item("SalesOrderID"))
                        Console.WriteLine("   OrderDate: {0} ", nestedReader.Item("OrderDate"))
                    Loop
                Loop
            End Using
        End Using
    Catch ex As EntityException
        Console.WriteLine(ex.ToString())
    End Try

    conn.Close()
End Using
using (EntityConnection conn =
    new EntityConnection("name=AdventureWorksEntities"))
{
    conn.Open();
    try
    {
        // Create an EntityCommand.
        using (EntityCommand cmd = conn.CreateCommand())
        {
            // Create a nested query.
            string esqlQuery =
                @"Select c.ContactID, c.SalesOrderHeader
            From AdventureWorksEntities.Contact as c";

            cmd.CommandText = esqlQuery;
            // Execute the command.
            using (EntityDataReader rdr =
                cmd.ExecuteReader(CommandBehavior.SequentialAccess))
            {
                // The result returned by this query contains 
                // ContactID and a nested collection of SalesOrderHeader items.
                // associated with this Contact.
                while (rdr.Read())
                {
                    // the first column contains Contact ID.
                    Console.WriteLine("Contact ID: {0}", rdr["ContactID"]);

                    // The second column contains a collection of SalesOrderHeader 
                    // items associated with the Contact.
                    DbDataReader nestedReader = rdr.GetDataReader(1);
                    while (nestedReader.Read())
                    {
                        Console.WriteLine("   SalesOrderID: {0} ", nestedReader["SalesOrderID"]);
                        Console.WriteLine("   OrderDate: {0} ", nestedReader["OrderDate"]);
                    }
                }
            }
        }
    }
    catch (EntityException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    conn.Close();
}

참고 항목

기타 리소스

EntityClient 사용(Entity Framework 작업)