Gewusst wie: Ausführen einer Abfrage, die geschachtelte Auflistungen zurückgibt (EntityClient)
Dieses Beispiel zeigt die Ausführung eines Befehls für ein konzeptionelles Modell mit einem EntityCommand-Objekt und das Abrufen der Ergebnisse der geschachtelten Auflistung mithilfe eines EntityDataReader.
So führen Sie den Code in diesem Beispiel aus
Fügen Sie dem Projekt das AdventureWorks Sales-Modell hinzu, und konfigurieren Sie das Projekt für die Verwendung von Entity Framework . Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Entity Data Model-Assistenten (Entity Framework).
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.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;
Beispiel
Eine geschachtelte Auflistung ist eine Auflistung innerhalb einer anderen Auflistung. Der folgende Code ruft eine Auflistung von Contacts und die geschachtelten Auflistungen von SalesOrderHeaders für jeden Contact auf.
Using conn As New EntityConnection("name=AdventureWorksEntities")
conn.Open()
' Create an EntityCommand.
Using cmd As EntityCommand = conn.CreateCommand()
' Create a nested query.
Dim esqlQuery As String = "Select c.ContactID, c.SalesOrderHeaders" & _
" From AdventureWorksEntities.Contacts 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.
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.
Dim nestedReader As DbDataReader = rdr.GetDataReader(1)
While nestedReader.Read()
Console.WriteLine(" SalesOrderID: {0} ", nestedReader("SalesOrderID"))
Console.WriteLine(" OrderDate: {0} ", nestedReader("OrderDate"))
End While
End While
End Using
End Using
conn.Close()
End Using
using (EntityConnection conn =
new EntityConnection("name=AdventureWorksEntities"))
{
conn.Open();
// Create an EntityCommand.
using (EntityCommand cmd = conn.CreateCommand())
{
// Create a nested query.
string esqlQuery =
@"Select c.ContactID, c.SalesOrderHeaders
From AdventureWorksEntities.Contacts 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"]);
}
}
}
}
conn.Close();
}