Comprensión profunda del error de carga y eliminación lenta en MVC .net

Estaba tratando de escribir una respuesta detallada completa a la siguiente pregunta:¿Por qué funciona "Eliminar" y no "usar (var db = new DataContext ())"?

así que configuré mi proyecto que incluye:

Departamentos y empleados que utilizan el marco de la entidad.

entonces mi método de acción fue este:

public ActionResult Index()
    {

        IEnumerable<department> d;
        using (var ctx = new ApplicationDbContext())
        {

            d = ctx.departments;

        }


        return View(d);
}

Es natural esperar que esto resulte en un error común:

The operation cannot be completed because the DbContext has been disposed

y cuando quise resolverlo hice lo siguiente [para forzar una carga ansiosa en lugar de una carga fácil]:

 public ActionResult Index()
    {

        IEnumerable<department> d;
        using (var ctx = new ApplicationDbContext())
        {

            d = ctx.departments.toList();

        }


        return View(d);
}

Así que estaba tratando de entender las cosas debajo del capó y miré el tipo de retorno del método View (). y llegué a la siguiente 'Correcto'supuestos:

1- el modelo [d] se llama en forma de carga diferida dentro de la instrucción de uso.

2- entonces cuando el modelo [d] se envía a la vista para generar la página, el DbContext ya está dispuesto por el último corchete de la instrucción using.

3- resolvemos esta situación enviando el modelo [d] a la vista con ansiosa carga.

luego continué mis suposiciones que resultaron ser 'incorrecto'de la siguiente manera:

4- dado que el método View () está devolviendo el objeto ViewResult, que también es un ActionResult ... entonces puedo generar este objeto dentro de la instrucción using y luego devolverlo al usuario.

entonces hice lo siguiente:

public ActionResult Index()
    {

        ActionResult myView;

        using (var ctx = new ApplicationDbContext())
        {

            IEnumerable<department> d = ctx.departments;

            myView =  View(d);

        }


        return myView;
    }

así que me dije a mí mismo ahora cuando lo ejecuto, el objeto ViewResult [myView] ya estará creado y será devuelto al usuario y no se encontrará ningún error.

Sin embargo, me sorprendió que ocurriera el mismo error:

The operation cannot be completed because the DbContext has been disposed

Me sorprendió cómo esta carga perezosa es realmente perezosa y se carga solo en el último momento.

Entonces continué mi 'incorrecto'supuestos de la siguiente manera:

5- puede ser que necesite forzar el método View () para ejecutar el resultado dentro de la instrucción using. así que usé el métodoExecuteResult(ControllerContext).

y ahora pensé que podía ejecutar el método de acción sin ningún error, pero nuevamente ocurrió el mismo error:

The operation cannot be completed because the DbContext has been disposed.

Entonces mi pregunta ahora es:

donde en el marco de MVC se produce la consulta de excución de carga diferida !!

o déjame reformular mi pregunta de la siguiente manera:

Por quéView(d) el método itera sobre el objeto [d] cuando está fuera del estado de uso, y no cuando el método view (d) está dentro de la Declaración de uso.

Solo necesito entender por qué mis suposiciones estaban equivocadas. Gracias de antemano

Respuestas a la pregunta(3)

Su respuesta a la pregunta