Procédure : utiliser des chemins d'accès de requête pour personnaliser des résultats (Entity Framework)
Cette rubrique fournit un exemple de spécification d'un chemin d'accès de requête qui définit les objets connexes qui sont retournés lorsque la requête est exécutée sur un objet particulier dans un modèle conceptuel. La requête utilisée dans cet exemple retourne un seul objet Contact et tous les objets SalesOrderHeader et SalesOrderDetail connexes.
Pour spécifier le chemin d'accès de la requête, transmettez une représentation de chaîne du graphique d'objet à la méthode Include sur la classe ObjectQuery. La méthode Include peut être appliquée sur toute requête Entity Framework : LINQ to Entities , Entity SQL ou méthode du Générateur de requêtes.
L'exemple de cette rubrique est basé sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cette rubrique, vous devez déjà avoir ajouté le modèle de vente AdventureWorks à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour plus d'informations, consultez Procédure : utiliser l'Assistant EDM (Entity Framework) ou Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework).
Exemple
L'exemple suivant spécifie un chemin d'accès de la requête qui retourne un objet Contact et des objets SalesOrderHeader et SalesOrderDetail connexes.
Using context As New AdventureWorksEntities()
' Define a LINQ query with a path that returns
' orders and items for a contact.
Dim contacts = (From contact In context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails") _
Select contact).FirstOrDefault()
' Execute the query and display information for each item
' in the orders that belong to the contact.
For Each order As SalesOrderHeader In contacts.SalesOrderHeaders
Console.WriteLine(String.Format("PO Number: {0}", order.PurchaseOrderNumber))
Console.WriteLine(String.Format("Order Date: {0}", order.OrderDate.ToString()))
Console.WriteLine("Order items:")
For Each item As SalesOrderDetail In order.SalesOrderDetails
Console.WriteLine(String.Format("Product: {0} Quantity: {1}", _
item.ProductID.ToString(), item.OrderQty.ToString()))
Next
Next
End Using
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
// Define a LINQ query with a path that returns
// orders and items for a contact.
var contacts = (from contact in context.Contacts
.Include("SalesOrderHeaders.SalesOrderDetails")
select contact).FirstOrDefault();
// Execute the query and display information for each item
// in the orders that belong to the contact.
foreach (SalesOrderHeader order in contacts
.SalesOrderHeaders)
{
Console.WriteLine(String.Format("PO Number: {0}",
order.PurchaseOrderNumber));
Console.WriteLine(String.Format("Order Date: {0}",
order.OrderDate.ToString()));
Console.WriteLine("Order items:");
foreach (SalesOrderDetail item in order.SalesOrderDetails)
{
Console.WriteLine(String.Format("Product: {0} "
+ "Quantity: {1}", item.ProductID.ToString(),
item.OrderQty.ToString()));
}
}
}
La méthode Include retourne l'objet de requête et vous pouvez appeler cette méthode à plusieurs reprises sur un ObjectQuery pour inclure les entités de plusieurs relations, comme dans l'exemple suivant.
' Create a SalesOrderHeader query with two query paths,
' one that returns order items and a second that returns the
' billing and shipping addresses for each order.
Dim query As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address")
// Create a SalesOrderHeader query with two query paths,
// one that returns order items and a second that returns the
// billing and shipping addresses for each order.
ObjectQuery<SalesOrderHeader> query =
context.SalesOrderHeaders.Include("SalesOrderDetails").Include("Address");
Voir aussi
Tâches
Procédure : exécuter une requête qui retourne des objets de type d'entité (Entity Framework)
Procédure : explorer des relations à l'aide des propriétés de navigation (Entity Framework)
Concepts
Chargement d'objets connexes (Entity Framework)
Méthodes du Générateur de requêtes (Entity Framework)
LINQ to Entities
Vue d'ensemble d'Entity SQL