/ / Qual é a melhor maneira de tornar minha classe DbContext inacessível nos controladores? - asp.net-mvc, entidade-estrutura, modelo-visão-controlador, controlador, dbcontext

Qual é a melhor maneira de tornar minha classe DbContext inacessível nos controladores? - asp.net-mvc, entidade-estrutura, modelo-visão-controlador, controlador, dbcontext

Estou construindo um aplicativo Web com ASP.NET e eu criamos dois projetos separados em uma solução, dos quais um é o projeto ASP.NET e o outro um "Aplicativo de Console" chamado camada de dados. Na camada de dados, eu o conectei com meu banco de dados local (banco de dados de estrutura de entidade do ADO.NET primeiro).

Minha pergunta é: eu quero que minha classe DbContext sejainacessível nos controladores dentro do meu projeto ASP.NET. Atualmente, ainda é acessível apenas "usando a camada de dados". Eu tenho uma pasta no meu ASP.NET com classes de construtor e elas podem alcançar o DbContext, quero apenas que os construtores alcancem meu DbContext. Portanto, no meu controlador, eu só quero usar meus construtores para fazer algo com o DbContext.

Exemplo de como eu quero:

    public ActionResult Index()
{
return View(new ExampleBuilder().GetListFromDb());
}

E não (isso deve ser proibido e inacessível dentro do meu projeto):

private DbContext db = new DbContext();

public ActionResult Index()
{
return View(db.SomeModel.ToList());
}

Alguém tem uma boa solução para isso?

Respostas:

2 para resposta № 1

Você pode usar a seguinte estrutura de projeto

  • Web (Depende de Data.Repositórios e Comum)
  • Data.Repositories (Depende do Data.Model e do Common) - aqui você implementa repositórios que usam o contexto do EntityFramework do Data.Model.
  • Data.Model (Depende do comum) - coloque sua classe de contexto EntityFramework aqui, mas todos os modelos devem entrar em Comum para torná-los disponíveis para todos os projetos.
  • Common - seus modelos EntityFramework e tudo o mais que precisa estar acessível em qualquer lugar, por exemplo. exceções, utils.

Basicamente, seus métodos de repositório seriam assim:

public Common.User GetUserByEmail(string email)
{
using (var context = new Data.Model.MyContext())
{
return context.Users.FirstOrDefault(user => user.Email == email);
}
}

Sua web não tem uma referência a Data.Model e não poderá usar sua classe de contexto diretamente. Ela precisará passar pela camada de abstração de Repositórios.