c# - query - Entity Framework Eager Load Not Returning Data, Lazy Load Does
entity framework sql query (3)
Estoy usando el código primero EF5 y tengo un objeto que tiene una colección definida como virtual
(carga lenta). Esto devuelve datos cuando se llama. Sin embargo, quiero que esté ansiosamente cargada. Eliminé virtual
de la firma de la propiedad pero ahora siempre devuelve datos null
. EF ni siquiera ejecuta la consulta , ¿alguien puede ayudar?
Editar: Sé acerca de .include()
Prefiero usar el método de propiedad no virtual de hacerlo.
Objetos
User
( [Key]
Id está en el objeto Resource que es la clase Parent de la persona):
namespace Entities
{
[Table("Users")]
public class User : Person
{
[Required]
public ICollection<Role> Roles { get; set; }
}
}
Papel:
namespace Entities
{
public class Role
{
[Key]
public string Id { get; set; }
public virtual ICollection<User> Users { get; set; }
}
}
Tendrá que usar el método de inclusión para forzar la carga de las ICollections dentro de sus entidades con una carga ansiosa. El siguiente enlace podría ayudarlo: http://msdn.microsoft.com/en-us/data/jj574232.aspx
Solo una cosa mencionar aquí.
Si desactivo LazyLoading de EF con
this.DbContext.Configuration.LazyLoadingEnabled = false;
luego, el método "incluir" no cargará entidades secundarias para cargar con entusiasmo.
entonces, si quiero usar "incluir" en la consulta, necesito activar la propiedad LazyLoading de EF al mismo tiempo.
Esta es una confusión común. Lo opuesto a la carga diferida es: sin carga, a menos que usted mismo realice la carga de manera explícita (p. Ej., Cargando Include
usando Include
).
Por lo tanto, si desactivas la carga diferida de cualquier forma (quitar el modificador virtual
es una de ellas), el comportamiento no se convierte en carga ansiosa sino en carga .
Piénselo, supongamos que EF cargaría ansiosamente todo lo que no está marcado para la carga diferida. ¡Usted corre el riesgo de cargar la mitad de la base de datos haciendo una simple consulta!
No hay forma de hacer que una propiedad de navegación esté ansiosa por cargarse de manera predeterminada (si aún desea eso después de leer lo anterior).