Procedura: disconnettere oggetti da un contesto dell'oggetto (Entity Framework)

È possibile disconnettere oggetti dal contesto di un oggetto quando non sono più necessari. A tale scopo, chiamare il metodo Detach. Questa operazione consente di ridurre la quantità di memoria utilizzata.

I vantaggi della disconnessione di oggetti devono essere valutati rispetto ai requisiti aggiuntivi di elaborazione necessari per eseguire l'operazione. Per ulteriori informazioni, vedere Connessione e disconnessione di oggetti (Entity Framework).

L'esempio incluso in questo argomento è basato sul modello Sales di AdventureWorks. Per eseguire il codice incluso in questo esempio, è necessario avere già aggiunto il modello Sales di AdventureWorks al progetto e avere configurato il progetto per l'utilizzo di Entity Framework. A tale scopo, completare le procedure descritte in Procedura: configurare manualmente un progetto di Entity Framework e Procedura: definire manualmente i file di modello e di mapping (Entity Framework).

Esempio

In questo esempio viene illustrato come scollegare gli oggetti SalesOrderDetail e SalesOrderHeader da un oggetto ObjectContext quando non sono più necessari per l'applicazione.

' This method is called to detach SalesOrderHeader objects and 
' related SalesOrderDetail objects from the supplied object 
' context when no longer needed by the application. 
' Once detached, the resources can be garbage collected. 
Private Shared Sub DetachOrders(ByVal context As ObjectContext, ByVal order As SalesOrderHeader)
    Try
        ' Detach each item from the collection. 
        While order.SalesOrderDetails.Count > 0
            ' Detach the first SalesOrderDetail in the collection. 
            context.Detach(order.SalesOrderDetails.First())
        End While

        ' Detach the order. 
        context.Detach(order)
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Sub
// This method is called to detach SalesOrderHeader objects and 
// related SalesOrderDetail objects from the supplied object
// context when no longer needed by the application. 
// Once detached, the resources can be garbage collected.
private static void DetachOrders(ObjectContext context,
    SalesOrderHeader order)
{
    try
    {
        // Detach each item from the collection.
        while (order.SalesOrderDetails.Count > 0)
        {
            // Detach the first SalesOrderDetail in the collection.
            context.Detach(order.SalesOrderDetails.First());
        }

        // Detach the order.
        context.Detach(order);
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

Vedere anche

Concetti

Gestione di connessioni e transazioni (Entity Framework)
Utilizzo di oggetti (Entity Framework)