Cette documentation est archivée et n’est pas conservée.

Procédure : utiliser le chargement différé pour charger des objets connexes (Entity Framework)

Visual Studio 2010

Cette rubrique explique comment utiliser le chargement différé pour charger des objets connexes. Lorsque le chargement différé est activé, les objets connexes sont chargés lorsqu'ils font l'objet d'un accès via une propriété de navigation. Vous pouvez toujours charger des objets de façon anticipée à l'aide de la méthode Include ou les charger de façon explicite à l'aide de la méthode LoadProperty. Pour plus d'informations, consultez Chargement d'objets connexes (Entity Framework).

Dans le runtime Entity Framework , la valeur par défaut de la propriété LazyLoadingEnabled dans une instance d'un objet ObjectContext est false. Toutefois, si vous utilisez les outils Entity Framework pour créer un nouveau modèle et les classes générées correspondantes, le code généré attribue à LazyLoadingEnabled la valeur true dans le constructeur du contexte de l'objet généré.

L'exemple de cette rubrique est basé sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cette rubrique, vous devez déjà avoir ajouté le modèle de vente AdventureWorks à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour plus d'informations, consultez Procédure : utiliser l'Assistant EDM (Entity Framework) ou Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework).

Exemple

L'exemple suivant présente dix contacts et permet à l'utilisateur d'en sélectionner un. Les commandes chargées dépendent du contact sélectionné.

class LazyLoading
{
    public void EnableLazyLoading()
    {
        using (AdventureWorksEntities context =
            new AdventureWorksEntities())
        {
            // You do not have to set context.ContextOptions.LazyLoadingEnabled to true 
            // if you used the Entity Framework to generate the object layer.
            // The generated object context type sets lazy loading to true
            // in the constructor. 
            context.ContextOptions.LazyLoadingEnabled = true;

            // Display ten contacts and select a contact
            var contacts = context.Contacts.Take(10);
            foreach (var c in contacts)
                Console.WriteLine(c.ContactID);

            Console.WriteLine("Select a customer:");
            Int32 contactID = Convert.ToInt32(Console.ReadLine());

            // Get a specified customer by contact ID. 
            var contact = context.Contacts.Where(c => c.ContactID == contactID).FirstOrDefault();

            // If lazy loading was not enabled no SalesOrderHeaders would be loaded for the contact.
            foreach (SalesOrderHeader order in contact.SalesOrderHeaders)
            {
                Console.WriteLine("SalesOrderID: {0} Order Date: {1} ",
                    order.SalesOrderID, order.OrderDate);
            }
        }
    }
}

Voir aussi

Afficher: