framework diferida carga c# .net entity-framework linq entity-framework-6

c# - framework - EF6, la carga diferida no funciona como se esperaba



carga diferida entity framework (2)

Con EF 6, la Lazy Loading Enabled se establece en True en el modelo. Aquí hay un ejemplo de mi problema:

var agent = context.AgentDetail.Where(a => a.Agent.GroupCode == "1234");

Correr eso devolverá 5 resultados. Si después de eso corro (solo con fines de prueba)

var code = agent.FirstOrDefault().Agent.GroupCode;

Obtengo una excepción de referencia nula porque el Agent es null .

Aquí están mis entidades:

public partial class AgentDetail : Entity<int> { public Nullable<System.DateTime> Date { get; set; } public string Name { get; set; } public decimal Balance { get; set; } ... public virtual Agent Agent { get; set; } } public partial class Agent : Entity<int> { [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] public Agent() { this.AgentAspNetUsers = new HashSet<AgentAspNetUsers>(); this.AgentDetail = new HashSet<AgentDetail>(); } public string GroupCode { get; set; } ... [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection<AgentAspNetUsers> AgentAspNetUsers { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] public virtual ICollection<AgentDetail> AgentDetail { get; set; } }

¿Cómo podría darme 5 resultados en la primera consulta, entonces? No puedo entender lo que está mal aquí, cualquier ayuda sería apreciada.


De los requisitos para crear proxies POCO

  1. Una clase de datos personalizada debe declararse con acceso público.
  2. Una clase de datos personalizada no debe sellarse
  3. Una clase de datos personalizada no debe ser abstracta
  4. Una clase de datos personalizada debe tener un constructor público o protegido que no tenga parámetros. Use un constructor protegido sin parámetros si desea que el método CreateObject se use para crear un proxy para la entidad POCO. Llamar al método CreateObject no garantiza la creación del proxy: la clase POCO debe cumplir con los demás requisitos que se describen en este tema.
  5. La clase no puede implementar las interfaces IEntityWithChangeTracker o IEntityWithRelationships porque las clases proxy implementan estas interfaces.
  6. La opción ProxyCreationEnabled debe establecerse en verdadero.
  7. Cada propiedad de navegación debe declararse como pública, virtual (Anulable en Visual Basic) y no sellada (NotOverridable en Visual Basic) obtener acceso. La propiedad de navegación definida en la clase de datos personalizada debe tener una propiedad de navegación correspondiente en el modelo conceptual. Para obtener más información, vea Cargar entidades de POCO relacionadas.

Verifique estos puntos en sus clases. En el código pegado, AgentDetail no tiene un constructor público / protegido.


Intenta definir la relación entre las entidades. Debería funcionar si su carga diferida se ha habilitado.