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 № 1Você 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.