Sdílet prostřednictvím


Gewusst wie: Ausführen einer Abfrage, die geschachtelte Auflistungen zurückgibt (EntityClient)

Dieses Thema bietet ein Beispiel, wie ein Befehl für ein Entity Data Model mit EntityCommand ausgeführt wird und wie die geschachtelten Auflistungsergebnisse mit EntityDataReader abgerufen werden.

So führen Sie den Code in diesem Beispiel aus

  1. Fügen Sie dem Projekt das "AdventureWorks Sales"-Modell hinzu, und konfigurieren Sie das Projekt für die Verwendung des Entity Framework. Gehen Sie dazu folgendermaßen vor:

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

    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;
    

Beispiel

Eine geschachtelte Auflistung ist eine Auflistung innerhalb einer anderen Auflistung. Der folgende Code ruft eine Auflistung von Contacts und geschachtelte Auflistungen von SalesOrderHeaders für jeden Contact auf.

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();
}

Siehe auch

Weitere Ressourcen

Arbeiten mit EntityClient (Entity Framework-Aufgaben)