2011-09-23 6 views
6

tengo esta clasecarga lenta no funciona cuando en nuevos objetos guardados, (al subir desde el contexto en el que los salvó)

public class Comment 
{  
    public long Id { get; set; } 
    public string Body { get; set; } 
    public long OwnerId { get; set; } 
    public virtual Account Owner { get; set; } 
    public DateTime CreationDate { get; set; } 
} 

el problema es que el dueño de la propiedad virtual es que consigo null object reference exception cuando se hace :

comment.Owner.Name 

cuando se llama a este derecho después de que el objeto fue salvado (de la misma instancia de DbContext) con un nuevo contexto funcionará

una ¿alguien sabe algo sobre esto?

Respuesta

18

Eso es porque ha creado Comment con el constructor. Eso significa que la instancia de comentario no está proxiada y no puede usar la carga diferida. Debe utilizar el método CreateDbSet en lugar de conseguir instancia proxy de Comment:

var comment = context.Comments.Create(); 
// fill comment 
context.Comments.Add(comment); 
context.SaveChanges(); 
string name = comment.Owner.Name; // Now it should work because comment instance is proxied 
+0

Gracias por esto, muy concisa y al grano! –

+1

Para cualquier otra persona que busque una forma de evitar esto, pero digamos, utilizando el cuaderno MVC (que usa el constructor predeterminado), puede hacer referencia explícita de esta manera: contexto.Entrada (comentario) .Referencia (x => x .Owner) .Load(); –

+0

m.t.bennett: Eso fue muy útil, gracias por tu comentario. –

Cuestiones relacionadas