publicas protegidas proteccion privadas privada operadores niveles modificador español encapsulamiento clases clase acceso c# entity-framework c#-4.0 ef-code-first entity-framework-4.3

c# - protegidas - primer código auto gen clase de proxy de navegación y las propiedades de colección son nulas



protected c# español (2)

¿Cómo puedo diagnosticar esto más?

Puede verificar, por ejemplo, si las entidades que está inspeccionando están adjuntas al contexto mirando en el context.ChangeTracker.Entries() del seguidor de cambios. Colección context.ChangeTracker.Entries() .

Es muy posible que tenga un proxy dinámico con todas las propiedades de navegación null , por ejemplo:

Entity entity = context.Entities.Create();

entity será un proxy, pero NavigationName y CollectionName serán null y permanecerán null incluso cuando acceda a estas propiedades (lo que lleva a NullReferenceException s). Esto solo cambiará cuando adjunte la entidad:

context.Entities.Attach(entity);

Si accede a las propiedades ahora se debe ejecutar la carga diferida. NavigationName puede permanecer null si no hay ninguna entidad relacionada en la base de datos, pero la colección CollectionName nunca debe ser null después de adjuntarla y acceder a ella. Si no hay entidades relacionadas en el DB, el resultado debería ser una colección vacía, pero no null .

Para todas mis POCO, las propiedades de navegación y recolección son nulas.

Déjame proporcionar algunos antecedentes. Tengo un primer proyecto de código complejo usando EF 4.3.1. La generación de proxy estaba deshabilitada. Las propiedades de recolección y navegación se administraron manualmente.

Ahora estoy habilitando la creación de proxy y la carga diferida. Al depurar, puedo ver que mi entidad (que se convierte en mi tipo de POCO conocido) ahora es en realidad una clase de proxy generada automáticamente. Hasta aquí todo bien.

Ahora, cuando miro mis propiedades de navegación, son nulas. Del mismo modo, las propiedades de mi colección son nulas.

Usando la reflexión, puedo ver que la clase proxy HA anulado mis propiedades de navegación y de recolección.

Todas las propiedades de navegación y colección son virtuales. p.ej:

public virtual NavigationType NavigationName { get; set; } public virtual ICollection<CollectionType> CollectionName { get; set; }

Además, todas las tablas se inicializan como tales:

modelBuilder.Entity<TEntity>() .Map(m => { m.MapInheritedProperties(); m.ToTable("TableName"); });

También puedo confirmar que la base de datos se genera como se esperaba. Las claves foráneas están todas presentes y están asociadas a los campos esperados.

¿Por qué son nulos? ¿Cómo puedo diagnosticar esto más?