Utilizando las propiedades de navegación de Entity Framework sin crear muchas consultas (evitando N + 1)

He estado usando Entity Framework Profiler para probar mi acceso a datos en un proyecto MVC y he encontrado varias páginas donde estoy haciendo muchas más consultas de db de las que necesito debido a problemas de N + 1.

Aquí hay un ejemplo simple para mostrar mi problema:

var club = this.ActiveClub; // ActiveClub uses code similar to context.Clubs.First() 
var members = club.Members.ToList();
return View("MembersWithAddress", members);

La vista recorre los Miembros y luego sigue una propiedad de navegación en cada miembro para mostrar también su dirección. Cada una de las solicitudes de dirección da como resultado una consulta de base de datos adicional.

Una forma de resolver esto sería usar Incluir para asegurarse de que las tablas adicionales que necesito se consulten por adelantado. Sin embargo, parece que solo puedo hacer esto en el ObjectSet of Clubs adjunto directamente al contexto. En este caso, muchos controladores comparten la propiedad ActiveClub y no siempre quiero consultar la tabla de miembros y direcciones por adelantado.

Me gustaría poder usar algo como:

var members = club.Members.Include("Address").ToList();

But, Members es una EntityCollection y no tiene el método Incluir.

¿Hay alguna forma de forzar una carga en la EntityCollection de Miembros y pedirle a EF que también cargue sus Direcciones?

Or, está utilizando las propiedades de navegación de EntityCollection en una entidad de esta manera, solo una muy mala idea; y debes saber lo que estás cargando cuando lo obtienes del contexto?

Respuestas a la pregunta(1)

Su respuesta a la pregunta