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?
Debe definir las relaciones entre las entidades que usan modelbuilder: http://blogs.msdn.com/b/aspnetue/archive/2011/05/04/entity-framework-code-first-tutorial-supplement-what-is-going -on-in-a-fluent-api-call.aspx