Instrukcje: Wykonywanie zapytania, które zwraca kolekcje zagnieżdżone
W tym pokazano, jak wykonać polecenie względem modelu koncepcyjnego, używając obiektu EntityCommand, oraz jak pobrać zagnieżdżone wyniki kolekcji, używając EntityDataReader.
Aby uruchomić kod w tym przykładzie
Dodaj model AdventureWorks Sales Do projektu i skonfiguruj projekt tak, aby korzystał z programu Entity Framework. Aby uzyskać więcej informacji, zobacz Instrukcje: jak korzystać z Kreatora modelu danych jednostki.
Na stronie kodowej aplikacji dodaj następujące
using
dyrektywy (Imports
w Visual Basic):using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Data.EntityClient; using System.Data.Metadata.Edm;
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
Przykład
Zagnieżdżona kolekcja to zbiór danych, który znajduje się wewnątrz innego zbioru danych. Poniższy kod pobiera kolekcję Contacts
oraz zagnieżdżone kolekcje SalesOrderHeaders
, które są skojarzone z każdym Contact
.
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: {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: {nestedReader["SalesOrderID"]} ");
Console.WriteLine($" OrderDate: {nestedReader["OrderDate"]} ");
}
}
}
}
conn.Close();
}
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