Esta documentación está archivada y no tiene mantenimiento.

Cómo: Utilizar la carga diferida para cargar objetos relacionados (Entity Framework)

Visual Studio 2010

En este tema se muestra cómo utilizar la carga diferida para cargar objetos relacionados. Con la carga diferida habilitada, los objetos relacionados se cargan cuando se obtiene acceso a ellos a través de una propiedad de navegación. Todavía puede cargar objetos rápidamente con el método Include o cargarlos explícitamente con el método LoadProperty. Para obtener más información, vea Cargar objetos relacionados (Entity Framework).

En el motor de ejecución de Entity Framework , el valor predeterminado de la propiedad LazyLoadingEnabled de una instancia de ObjectContext es false. Sin embargo, si utiliza las herramientas de Entity Framework para crear un nuevo modelo y las clases generadas correspondientes, el código generado establecerá LazyLoadingEnabled en true en el constructor del contexto de objetos generado.

El ejemplo de este tema se basa en el modelo AdventureWorks Sales. Para ejecutar el código de este tema, debe haber agregado el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para que use Entity Framework. Para obtener más información, vea Cómo: Usar el Asistente para Entity Data Model (Entity Framework) o Cómo: Configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente un modelo Entity Data Model (Entity Framework).

Ejemplo

El siguiente ejemplo muestra diez contactos y permite al usuario seleccionar uno. Según el contacto seleccionado, se cargan sus pedidos relacionados.

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

Vea también

Mostrar: