Estoy utilizando Entity Framework 4 con MVC y necesito asegurarme de que cualquier entidad referenciada que quiero usar en mi vista haya sido cargada antes de que regrese el método del controlador, de lo contrario la vista escupe el temido:Entity Framework - Ansioso de cargar entidades relacionadas
La instancia de ObjectContext se ha eliminado y ya no se puede usar para las operaciones que requieren una conexión.
Al seleccionar directamente desde el contexto, sólo puede utilizar el método Include(string)
para obligarlos a ser incluidos en la consulta SQL generada:
var sellers = context.Sellers.Include("Recommendations.User").ToList();
Sin embargo, si tengo (por ejemplo) un ayudante método que acepta una entidad y necesita que todos los elementos se carguen, no hay un método Include
disponible.
void Test(Seller seller)
{
// ensure all recommendations and their users are loaded
}
El método de fuerza bruta es colocar a través de ellos:
foreach (var recommendation in seller.Recommendations)
recommendation.User.ToString(); // just force a load
Si tengo 100 recomendaciones, esto creará 101 consultas SQL detrás de las escenas. Idealmente, quiero un método/enfoque que cargue todos los objetos Recommendation
Y User
con un solo viaje a SQL.
Muéstrame el dinero.
EDIT No estoy realmente interesado en discutir si esta es una arquitectura buena o mala. He simplificado mi escenario por el bien de la pregunta. ¿Puedes hacer lo que estoy pidiendo con la API de EF?
EDITAR 2
Ladislav's edit ofrecido esperanza de un nuevo enfoque, pero parece que no soy muy allá.
que puedo lograr lo que quiero a través de este:
context.Sellers.Include("Recommendations.User").Single(s => s.Id == seller.Id);
Este enfoque no funciona usando LoadProperty
...
context.LoadProperty(seller, "Recommendations.User");
... a medida que se produce el error ...
No se encontró la propiedad de navegación especificada Recommendations.User.
Ninguno de estos enfoques funciona si no tiene una referencia al contexto.
Si bien esto no responde a su pregunta (por lo tanto, la publico como un comentario), sí analiza la carga de entidades relacionadas ya que actualmente funciona en EF6. También este es el primer enlace SOF que aparece en Google cuando se buscan "entidades relacionadas con la carga del marco de trabajo de la entidad": http://msdn.microsoft.com/en-us/data/jj574232. Así que pensé en compartir ... . –