2012-08-22 45 views
8

Estoy usando EF 5 con Code First. Tengo una clase que siempre quiero cargar algunas propiedades. Quité el virtuales palabra clave pero no es la carga ansiosa:Código de EF Primera carga ansiosamente forzada

public class Person 
{ 
    public ICollection<Email> Emails { get; set; } 
    public Profile Profile {get;set;} 
} 

Así desactivando la carga diferida, no se auto carga ansiosa ¿verdad? Si es así, ¿cómo puedo archivar eso sin usar Include()?

Gracias!

Respuesta

18

No, desactivar la carga diferida quitando la palabra clave virtual no habilitará automáticamente la carga ansiosa. Tienes que Include la relacionada Entity o Collection así:

var personWithProfile = ctx.People.Include(x => x.Profile).First(); 
var personWithProfileAndEmails = ctx.People. 
              .Include(x => x.Profile) 
              .Include(x => x.Emails) 
              .First(); 

Esta es una gran lectura del blog del equipo de ADO.NET: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

+0

Gracias por el enlace y es muy útil. Soy consciente del comando Incluir. Pero no hay forma de forzar la carga ansiosa en la definición de la clase POCO (o archivo de mapeo) ¿verdad? – Calvin

+1

No, quiere decirle explícitamente a EF cuándo debe cargar los datos. Si no lo hace y EF acaba de incluir todas las entidades relacionadas, habría problemas importantes de rendimiento. Esencialmente, cada instrucción include se traduce en una "combinación interna" SQL y la consulta también selecciona cada columna en la tabla unida. – Paul

+0

¡Gracias por la aclaración! – Calvin

Cuestiones relacionadas