Código de Entity Framework First Lazy Loading

Estoy teniendo dos clases de objetos

public class User { public Guid Id { get; set; } public string Name { get; set; } // Navigation public ICollection Products { get; set; } } public class Product { public Guid Id { get; set; } // Navigation public User User { get; set; } public Guid User_Id { get; set; } public string Name { get; set; } } 

Cuando cargo un usuario usando dataContext, obtengo la lista de productos que son nulos (esto está bien).

Si agrego una palabra clave “virtual” a la lista de Productos,

 public virtual ICollection Products { get; set; } 

cuando cargo al usuario, también obtengo la lista de Productos.

¿Por qué está pasando esto? Pensé que la palabra clave “virtual” se usa para no cargar las entidades a menos que lo expliques explícitamente (usando una statement “Include”)

Creo que lo entendí todo mal

Esto está mal

La palabra clave “virtual” se usa para no cargar las entidades a menos que usted lo explique (usando una statement “Include”)

La carga diferida significa que las entidades se cargarán automáticamente cuando acceda por primera vez a la propiedad de recostackción o navegación, y eso ocurrirá de forma transparente, como si siempre estuvieran cargadas con un objeto principal.

El uso de “incluir” se carga a pedido, cuando especifica las propiedades que desea consultar.

La existencia de palabra clave virtual está relacionada solo con la carga diferida. virtual palabra clave virtual permite el tiempo de ejecución del marco de la entidad crear proxies dynamics para sus clases de entidad y sus propiedades, y por ese apoyo la carga diferida. Sin virtual, no se admitirá la carga diferida, y obtendrá nulo en las propiedades de la colección.

El hecho es que puede usar “incluir” en cualquier caso, pero sin carga lenta es la única forma de acceder a las propiedades de colección y navegación.

Supongo que está solicitando una propiedad que es un tema de carga diferida mientras se encuentra en el contexto de ef:

 using (var db = new Context()) { var user = db.Users.Where(...); var products = user.Products; // being loaded right away } 

Intenta dejarlo:

 User user; using (var db = new Context()) { user = db.Users.Where(...); // I guess you will need here: // .Include(u => u.Products) } var products = user.Products; // what error will you get here?