EF6 no tiene propiedad de navegación de carga diferida
Tengo un problema con la carga diferida de EF6. He buscado en StackOverflow, pero las otras preguntas que he encontrado no se ajustan a mi caso.
Estoy usando elvirtual
palabra clave y mis clases sonpublic
. LazyLoadingEnabled
yProxyCreationEnabled
ambos están configurados entrue
.
Cuando cargo uncourse
objeto de la base de datos,presentationId
se establece en la correctaid
ypresentation
esnull
lo cual es correcto, porque aún no se ha cargado.
Cuando paso elpresentation
propiedad a laPresentationsController.ToDto()
método debería ser cargado perezoso, pero obtengo unnull reference
excepción dentro del método porque todavía esnull
.
Sé que las relaciones están funcionando porque cuando forzo cargar elpresentation
propiedad de uncourse
en elWatch window
con un punto de quiebre en elpublic static CourseDto ToDto(Course item, DnbContext db)
método se carga. Ver imagenes:
Como puedes veritem.presentation
esnull
:
Cuando evalúo manualmentedb.courses.Find(257).presentation
que hace referencia a la misma presentación que elitem
el objeto sí, ambos están cargados:
Aquí están mis POCO:
public abstract class BaseModel : ISoftDelete {
public int id { get; set; }
}
public class Course : BaseModel {
[Required]
public int presentationId { get; set; }
public virtual Presentation presentation { get; set; }
}
Mis métodos de controlador de API web:
// GET api/Courses/5
public CourseDto GetCourse(int id) {
var item = db.courses.FirstOrDefault(x => x.id == id);
return ToDto(item, db);
}
public static CourseDto ToDto(Course item, DnbContext db) {
var dto = new CourseDto();
if (item.presentationId > 0) dto.presentation = PresentationsController.ToDto(item.presentation, db);
return dto;
}
¿Algunas ideas?