Proprietà di navigazione

Le proprietà di navigazione in Entity Framework forniscono un modo per spostare un'associazione tra due tipi di entità. Una proprietà di navigazione viene definita dall'oggetto Elemento NavigationProperty (CSDL) nel modello concettuale. Ogni oggetto può disporre di una proprietà di navigazione per ogni relazione di cui fa parte. Le proprietà di navigazione consentono di spostare e gestire relazioni in entrambe le direzioni, restituendo un oggetto EntityReference, se la molteplicità è uno o zero-o-uno, oppure un oggetto EntityCollection, se la molteplicità è molti. È anche possibile scegliere di disporre di una navigazione unidirezionale; in tal caso la proprietà di navigazione può essere eliminata. Per ulteriori informazioni, vedere How to: Edit and Delete Navigation Properties.

Quando si utilizzano le classi generate da Entity Framework , le proprietà di navigazione vengono create per oggetti che fanno parte di una relazione. Per informazioni sull'utilizzo delle proprietà di navigazione nelle entità POCO, vedere Requisiti per la creazione di proxy POCO (Entity Framework).

Modifica delle relazioni

Per modificare una relazione è possibile utilizzare le proprietà di navigazione. Nell'esempio seguente viene assegnato un cliente diverso a un ordine tramite la proprietà di navigazione Customer nell'oggetto Order per accedere al riferimento al cliente associato a tale ordine: order.Customer = customer.

Nell'esempio seguente viene aggiunto un ordine a un ordine di un cliente esistente tramite la proprietà di navigazione Orders per accedere alla raccolta di orders che appartiene a customer:

customer.Orders.Add(order).

In un'associazione di chiavi esterne è possibile costituire o modificare una relazione impostando la proprietà di chiave esterna dell'oggetto dipendente, come illustrato nell'esempio seguente:

order.CustomerID = CustomerID.

Per ulteriori informazioni sulle associazioni di chiavi esterne e indipendenti, vedere Definizione e gestione delle relazioni (Entity Framework).

È possibile utilizzare le proprietà di navigazione per caricare oggetti correlati a un'entità dall'associazione definita. Per ulteriori informazioni, vedere Caricamento di oggetti correlati (Entity Framework) e Procedura: spostarsi nelle relazioni utilizzando le proprietà di navigazione (Entity Framework).

Nell'esempio seguente nella sintassi delle query basate su metodi viene utilizzato il metodo SelectMany per ottenere tutti gli ordini dei contatti il cui cognome è "Zhou". La proprietà di navigazione Contact.SalesOrderHeader viene utilizzata per ottenere la raccolta di oggetti SalesOrderHeader per ciascun contatto.

Dim lastName = "Zhou"
Using context As New AdventureWorksEntities
    Dim ordersQuery = context.Contacts _
    .Where(Function(c) c.LastName = lastName) _
    .SelectMany(Function(o) o.SalesOrderHeaders)

    For Each order In ordersQuery
        Console.WriteLine("Order ID: {0}, Order date: {1}, Total Due: {2}", _
                order.SalesOrderID, order.OrderDate, order.TotalDue)
    Next
End Using
string lastName = "Zhou";
using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    IQueryable<SalesOrderHeader> ordersQuery = context.Contacts
        .Where(c => c.LastName == lastName)
        .SelectMany(c => c.SalesOrderHeaders);

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

Vedere anche

Concetti

Definizione e gestione delle relazioni (Entity Framework)