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
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:
Wenn Sie die Entity Data Model-Tools installiert haben, führen Sie das unter Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) beschriebene Verfahren aus.
Führen Sie andernfalls die unter Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework) beschriebenen Verfahren durch.
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();
}