Как отсоединить объекты от контекста объекта (платформа Entity Framework)

Можно отсоединить объекты от контекста объекта, если эти объекты больше не нужны. Для этого вызывается метод Detach. Это действие снижает объем используемой памяти.

Следует сравнить преимущества отсоединения объектов с дополнительными затратами на обработку, необходимую для выполнения операции. Дополнительные сведения см. в разделе Присоединение и отсоединение объектов (платформа Entity Framework).

Пример в этом разделе основан на модели Adventure Works Sales. Чтобы запустить код из данного примера, нужно сначала добавить к проекту модель AdventureWorks Sales и настроить его для использования платформы Entity Framework. Для этого выполните инструкции из разделов Как вручную настроить проект Entity Framework и Как определить модель и файлы сопоставления вручную (платформа Entity Framework).

Пример

Этот пример демонстрирует отсоединение от контекста ObjectContext объектов SalesOrderDetail и SalesOrderHeader, больше не нужных данному приложению.

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

См. также

Основные понятия

Управление соединениями и транзакциями (платформа Entity Framework)
Работа с объектами (платформа Entity Framework)