Поделиться через


Как выполнить запрос, возвращающий вложенные коллекции (EntityClient)

В этом разделе приводится пример выполнения команды для модели EDM с использованием EntityCommand и извлечения вложенной коллекции результатов с использованием EntityDataReader.

Выполнение кода в этом примере

  1. Добавьте модель AdventureWorks Sales к проекту и настройте проект для использования платформы Entity Framework. Для этого выполните одно из следующих действий.

  2. На странице кода приложения добавьте следующие инструкции using (Imports в Visual Basic):

    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 и вложенные коллекции SalesOrderHeaders, связанные с каждым объектом Contact.

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)