Q:

Instanciando o contexto da base de dados no controller

Olá, tenho uma dúvida relacionado ao modo de instanciamento do DbContext no controlador. Qual a diferença entre os dois métodos abaixo de instanciamento ?
1.
    private ApplicationDbContext _db;
    public ApplicationDbContext db
    {
        get { return _db ?? new ApplicationDbContext(); }
        set { _db = value; }
    }

2.
private readonly ApplicationDbContext db = new ApplicationDbContext();

Pois atualmente eu utilizo a segunda, porem em vários modelos de ASP.NET MVC 5 vejo que vem como padrão a primeira opção...

A:

Bem, a única diferença que vejo é que na primeira opção caso o valor de _db estiver nulo ele ira gerar uma nova instância, adiciona uma certa segurança a sua implementação, mas, como foi já foi comentado, a não ser que este seja apenas um projeto de testes, vejo dois problemas nisso:
1 - Ao utilizar o "new" é criado uma dependencia entre o seu controller e a classe "ApplicationDbContext", o ideal seria utilizar Injeção de dependencia para reduzir o acoplamento entre as camadas de sua aplicação.
2 - Ao realizar consultas no banco diretamente do controller, você está impedindo que ela possa ser reutilizada em outras partes do projeto, pois só estará acessivel dentro desse controller
Mas da pra citar vários outros problemas nessa abordagem....

