Freigeben über


Gewusst wie: Navigieren in Beziehungen mithilfe von Navigationseigenschaften (Entitiy Framework)

In diesem Thema wird gezeigt, wie Beziehungen mithilfe von Navigationseigenschaften navigiert werden können. Weitere Informationen finden Sie unter Navigationseigenschaften. Das Beispiel ruft alle Aufträge der Kontakte mit dem Nachnamen "Zhou" ab. Mit der Contact.SalesOrderHeader-Navigationseigenschaft wird eine Auflistung der SalesOrderHeader-Objekte für jeden Kontakt abgerufen. Dasselbe Beispiel zeigt die Verwendung der folgenden Entity Framework -Abfragetechnologien:

  • LINQ-to-Entities

  • Entity SQL mit ObjectQuery<T>

  • Abfrage-Generator-Methoden von ObjectQuery<T>

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

Dies ist das LINQ to Entities -Beispiel.

Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
    Dim contacts As ObjectSet(Of Contact) = context.Contacts

    Dim ordersQuery = From contact In contacts _
        Where contact.LastName = lastName _
        Select New With _
                {.LastName = contact.LastName, _
                 .Orders = contact.SalesOrderHeaders}

    For Each order In ordersQuery
        Console.WriteLine("Name: {0}", order.LastName)
        For Each orderInfo In order.Orders

            Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}", _
                    orderInfo.SalesOrderID, orderInfo.OrderDate, orderInfo.TotalDue)
        Next

        Console.WriteLine("")
    Next
End Using
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    ObjectSet<Contact> contacts = context.Contacts;

    var ordersQuery = from contact in contacts
                      where contact.LastName == lastName
                      select new { LastName = contact.LastName, Orders = contact.SalesOrderHeaders };

    foreach (var order in ordersQuery)
    {
        Console.WriteLine("Name: {0}", order.LastName);
        foreach (SalesOrderHeader orderInfo in order.Orders)
        {
            Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}",
                orderInfo.SalesOrderID, orderInfo.OrderDate, orderInfo.TotalDue);
        }
        Console.WriteLine("");
    }
}

Dies ist das Entity SQL -Beispiel.

Using context As New AdventureWorksEntities()
    Dim esqlQuery As String = "SELECT c.FirstName, c.SalesOrderHeaders " & _
        " FROM AdventureWorksEntities.Contacts AS c where c.LastName = @ln"

    Dim query As New ObjectQuery(Of DbDataRecord)(esqlQuery, context)

    ' Add parameters to the collection. 
    query.Parameters.Add(New ObjectParameter("ln", "Zhou"))

    For Each rec As DbDataRecord In query

        ' Display contact's first name. 
        Console.WriteLine("First Name {0}: ", rec(0))
        Dim list As List(Of SalesOrderHeader) = TryCast(rec(1), List(Of SalesOrderHeader))
        ' Display SalesOrderHeader information 
        ' associated with the contact. 
        For Each soh As SalesOrderHeader In list
            Console.WriteLine(" Order ID: {0}, Order date: {1}, Total Due: {2}",
                              soh.SalesOrderID, soh.OrderDate, soh.TotalDue)
        Next
    Next
End Using
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    string esqlQuery = @"SELECT c.FirstName, c.SalesOrderHeaders 
        FROM AdventureWorksEntities.Contacts AS c where c.LastName = @ln";
    ObjectQuery<DbDataRecord> query = new ObjectQuery<DbDataRecord>(esqlQuery, context);
    query.Parameters.Add(new ObjectParameter("ln", "Zhou"));

    foreach (DbDataRecord rec in query)
    {

        // Display contact's first name.
        Console.WriteLine("First Name {0}: ", rec[0]);
        List<SalesOrderHeader> list = rec[1] as List<SalesOrderHeader>;
        // Display SalesOrderHeader information 
        // associated with the contact.
        foreach (SalesOrderHeader soh in list)
        {
            Console.WriteLine("   Order ID: {0}, Order date: {1}, Total Due: {2}",
                soh.SalesOrderID, soh.OrderDate, soh.TotalDue);
        }
    }
}

Dies ist das Beispiel für die Abfrage-Generator-Methode.

Dim lastName = "Zhou"

Using context As New AdventureWorksEntities()
    ' Define a query that returns a nested 
    ' DbDataRecord for the projection. 
    Dim query As ObjectQuery(Of DbDataRecord) = context.Contacts.Select("it.FirstName, it.LastName, it.SalesOrderHeaders") _
                                                .Where("it.LastName = @ln", New ObjectParameter("ln", lastName))

    For Each rec As DbDataRecord In query.Execute(MergeOption.AppendOnly)

        ' Display contact's first name. 
        Console.WriteLine("First Name {0}: ", rec(0))
        Dim list As List(Of SalesOrderHeader) = TryCast(rec(2), List(Of SalesOrderHeader))
        ' Display SalesOrderHeader information 
        ' associated with the contact. 
        For Each soh As SalesOrderHeader In list
            Console.WriteLine(" Order ID: {0}, Order date: {1}, Total Due: {2}", _
                              soh.SalesOrderID, soh.OrderDate, soh.TotalDue)
        Next
    Next
End Using
string lastName = "Zhou";
using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Define a query that returns a nested 
    // DbDataRecord for the projection.
    ObjectQuery<DbDataRecord> query =
        context.Contacts.Select("it.FirstName, "
            + "it.LastName, it.SalesOrderHeaders")
        .Where("it.LastName = @ln", new ObjectParameter("ln", lastName));

    foreach (DbDataRecord rec in
        query.Execute(MergeOption.AppendOnly))
    {

        // Display contact's first name.
        Console.WriteLine("First Name {0}: ", rec[0]);
        List<SalesOrderHeader> list = rec[2]
            as List<SalesOrderHeader>;
        // Display SalesOrderHeader information 
        // associated with the contact.
        foreach (SalesOrderHeader soh in list)
        {
            Console.WriteLine("   Order ID: {0}, " +
                "Order date: {1}, Total Due: {2}",
                soh.SalesOrderID, soh.OrderDate, soh.TotalDue);
        }
    }
}

Siehe auch

Aufgaben

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

Konzepte

Abfragen eines konzeptionellen Modells (Entity Framework)
Definieren und Verwalten von Beziehungen (Entity Framework)