Procédure : détacher des objets d'un contexte d'objet (Entity Framework)

Vous pouvez détacher des objets d'un contexte d'objet lorsqu'ils ne sont plus nécessaires. Pour ce faire, appelez la méthode Detach. Cela réduit la quantité de mémoire utilisée.

Les avantages du détachement d'objets doivent être considérés en tenant compte du traitement supplémentaire requis pour effectuer l'opération. Pour plus d'informations, voir Attachement et détachement d'objets (Entity Framework).

L'exemple de cette rubrique est basé sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cet exemple, vous devez déjà avoir ajouté le modèle de vente AdventureWorks Sales Model à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour ce faire, exécutez les procédures décrites dans Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement les fichiers du modèle et les fichiers de mappage (Entity Framework).

Exemple

Cet exemple montre comment détacher les objets SalesOrderDetail et SalesOrderHeader d'un objet ObjectContext lorsqu'ils ne sont plus requis par l'application.

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

Voir aussi

Concepts

Gestion des connexions et des transactions (Entity Framework)
Utilisation d'objets (Entity Framework)