Cargar objetos con el EF.
Desde el framework puedes cargar relaciones usando
include. Por cada uno, el framework añadirá un
join que puede originar consultas complejas, y que sean devueltas grandes cargas de datos. A este tipo de cargas se les llama "
Eager loading".
Sin embargo, esto puede ser evitado usando el método
Load para hacer "
lazy or
explicit loading”, que abre una conexión a base de datos para recuperar la información necesaria.
Así nos aseguramos de que la consulta sólo ejecutará una petición a un objeto relacionado mediante una petición explícita.
Por ejemplo:
// Get a specified customer by contact ID.
Contact customer = context.Contact.Where("it.ContactID = @customerId",
new ObjectParameter("customerId", customerId)).First();
// Load the orders for the customer
if (!customer.SalesOrderHeader.IsLoaded)
{
customer.SalesOrderHeader.Load();
}
Filtra los datos.
Cuando se usa este tipo de carga (con
Load o con
LoadWith) se reciben todos los datos asociados con la clave primaria, pero la mayoría de los casos se deben aplicar filtros adicionales. Para ello se usa el método
DataLoadOptions.AssociateWith, que toma el criterio al cargar los datos como parámetro y aplica la consulta.
using (DataContext context = new DataContext())
{
DataLoadOptions options = new DataLoadOptions();
options.AssociateWith(cat=> cat.Products.Where(prod => !prod.Discontinued));
context.LoadOptions = options;
}