Cómo: Desasociar objetos de un contexto del objeto (Entity Framework)

Puede desasociar objetos de un contexto del objeto cuando ya no se requieren. Para ello, llame al método Detach. De este modo se reduce la cantidad de memoria que se usa.

Las ventajas de desasociar objetos se deberían considerar teniendo en cuenta el procesamiento adicional que precisa la operación. Para obtener más información, vea Asociar y desasociar objetos (Entity Framework).

El ejemplo de este tema se basa en el modelo AdventureWorks Sales. Para ejecutar el código de este ejemplo, debe haber agregado ya el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para usar Entity Framework. Para ello, complete los procedimientos de Cómo configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente los archivos de asignación y modelo (Entity Framework).

Ejemplo

En este ejemplo se muestra cómo desasociar los objetos SalesOrderDetail y SalesOrderHeader de un ObjectContext cuando la aplicación ya no los necesita.

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

Vea también

Conceptos

Administrar conexiones y transacciones (Entity Framework)
Trabajar con objetos (Entity Framework)