Profundo entendimento do carregamento lento e do descarte de erros no MVC .net

Eu estava tentando escrever uma resposta completa e detalhada para a seguinte pergunta:Por que "Dispose" funciona, e não "using (var db = new DataContext ())"?

então montei meu projeto que inclui:

Departamentos e funcionários usando a estrutura da entidade

então meu método de ação foi o seguinte:

public ActionResult Index()
    {

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

            d = ctx.departments;

        }


        return View(d);
}

é natural esperar que isso resulte no erro comum:

The operation cannot be completed because the DbContext has been disposed

e quando quis resolvê-lo, fiz o seguinte [para forçar o carregamento mais rápido do que o fácil]:

 public ActionResult Index()
    {

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

            d = ctx.departments.toList();

        }


        return View(d);
}

então eu estava tentando entender as coisas sob o capô e observei o tipo de retorno do método View (). e cheguei ao seguinte 'Corrigir' premissas:

1 - o modelo [d] é chamado de forma lenta de carregamento dentro da instrução using.

2- portanto, quando o modelo [d] é enviado à visualização para gerar a página, o DbContext já está disposto pelo último colchete da instrução using.

3- resolvemos essa situação enviando o modelo [d] para a vista com um estilo de carregamento ansioso.

então continuei minhas suposições que provaram ser 'errado' como segue:

4- como o método View () está retornando o objeto ViewResult, que também é um ActionResult. Em seguida, posso gerar esse objeto dentro da instrução using e devolvê-lo ao usuário.

então eu fiz o seguinte:

public ActionResult Index()
    {

        ActionResult myView;

        using (var ctx = new ApplicationDbContext())
        {

            IEnumerable<department> d = ctx.departments;

            myView =  View(d);

        }


        return myView;
    }

então eu disse a mim mesmo agora que quando o executo, o objeto ViewResult [myView] já será criado e será retornado ao usuário e nenhum erro será encontrado.

No entanto, fiquei surpreso que o mesmo erro ocorreu:

The operation cannot be completed because the DbContext has been disposed

Fiquei surpreso como esse carregamento preguiçoso é realmente preguiçoso e carrega apenas no último momento.

Então eu continuei meu 'errado'suposições da seguinte forma:

5- pode ser necessário forçar o método View () para calcular o resultado dentro da instrução using. então eu usei o métodoExecuteResult(ControllerContext).

e agora pensei em executar o método de ação sem nenhum erro, mas novamente ocorreu o mesmo erro:

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

Então, minha pergunta agora é:

onde na estrutura do MVC ocorre a execução de consultas de carregamento lento !!

ou deixe-me reformular minha pergunta da seguinte maneira:

PorqueView(d) O método itera sobre o objeto [d] quando está fora da declaração de uso, e não quando o método view (d) está dentro da Instrução using.

Eu só preciso entender por que minhas suposições estavam erradas.

questionAnswers(3)

yourAnswerToTheQuestion