Gewusst wie: Bestimmen von Ergebnissen mit Abfragepfaden (Entity Framework)

In diesem Thema finden Sie ein Beispiel für das Angeben eines Abfragepfads, mit dem definiert wird, welche zugehörigen Objekte bei Abfrage eines bestimmten Objekts in einem konzeptionellen Modell zurückgegeben werden. Die Abfrage in diesem Beispiel gibt ein einzelnes Contact-Objekt und alle zugehörigen SalesOrderHeader-Objekte und SalesOrderDetail-Objekte zurück.

Übergeben Sie zum Angeben eines Abfragepfads eine Zeichenfolgendarstellung des Objektdiagramms an die Include-Methode der ObjectQuery. Die Include-Methode kann über jeder Entity Framework -Abfrage angewendet werden: LINQ to Entities , Entity SQL oder Abfrage-Generator-Methode.

Das Beispiel in diesem Thema beruht auf dem Adventure Works Sales-Modell. Zum Ausführen des Codes in diesem Thema muss dem Projekt bereits das Adventure Works Sales-Modell hinzugefügt und das Projekt zur Verwendung von Entity Framework konfiguriert worden sein. Weitere Informationen finden Sie unter Gewusst wie: Verwenden des Assistenten für Entity Data Model (Entity Framework) bzw. Gewusst wie: Manuelles Konfigurieren eines Entity Framework-Projekts und Gewusst wie: Manuelles Definieren eines Entity Data Model (Entity Framework).

Beispiel

Im folgenden Beispiel wird ein Abfragepfad angegeben, der einen Contact sowie das verknüpfte SalesOrderHeader-Objekt und SalesOrderDetail-Objekt zurückgibt.

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()));
        }
    }
}

Die Include-Methode gibt das Abfrageobjekt zurück, und diese Methode kann mehrmals für eine ObjectQuery aufgerufen werden, um Entitäten von mehreren Beziehungen einzuschließen, wie im folgenden Beispiel dargestellt:

' 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");

Siehe auch

Aufgaben

Gewusst wie: Ausführen einer Abfrage, die Entitätstypobjekte zurückgibt (Entity Framework)
Gewusst wie: Navigieren in Beziehungen mithilfe von Navigationseigenschaften (Entitiy Framework)

Konzepte

Laden von verknüpften Objekten (Entity Framework)
Abfrage-Generator-Methoden (Entity Framework)
LINQ to Entities
Übersicht über Entity SQL