Procedura: eseguire una query che restituisce insiemi nidificati (EntityClient)
In questo argomento viene fornito un esempio per illustrare l'esecuzione di un comando su un modello EDM (Entity Data Model) mediante EntityCommand nonché il recupero dei risultati di insiemi nidificati mediante EntityDataReader.
Per eseguire il codice in questo esempio
Aggiungere il modello Sales di Adventure Works al progetto e configurare il progetto per l'utilizzo di Entity Framework. A tale scopo, effettuare una delle operazioni seguenti:
Se gli strumenti EDM (Entity Dati Model) sono stati installati, completare la procedura descritta in Procedura: utilizzare la procedura guidata Entity Data Model (Entity Framework).
In caso contrario, completare le procedure descritte in Procedura: configurare manualmente un progetto di Entity Framework e in Procedura: definire manualmente un modello EDM (Entity Framework).
Nella tabella codici dell'applicazione aggiungere le istruzioni using seguenti (Imports in 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;
Esempio
Un insieme nidificato è un insieme all'interno di un altro insieme. Nel codice seguente vengono recuperati un insieme di oggetti Contacts e insiemi nidificati di oggetti SalesOrderHeaders associati a ogni oggetto 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();
}