Opa, Bruno. Tudo bom?
Você pode separar seu código em alguns projetos separados:
MeuProjeto.Core
: projeto sem dependências usado pelos outros da solução, define classes abstratas e interface de repositório;MeuProjeto.Domain
: projeto com os modelos, validação, etc.MeuProjeto.Data
: projeto com o EntityFramework, aqui implementamos as interfaces em MeuProjeto.Core
usando o EFCore e fazemos o mapeamento para os modelos em MeuProjeto.Domain
;MeuProjeto.Web
: Projeto MVC. Aqui você vai ter a referência aos outros projetos da solução. Suas controllers irão depender das interfaces em MeuProjeto.Core
ou MeuProjeto.Domain
, mas a injeção de dependência vai devolver as implementações em MeuProjeto.Data
. De qualquer modo, você vai precisar de uma referência ao EFCore neste projeto, para usar no Startup da aplicação.
Como exemplo desta arquitetura, você pode dar uma olhada no projeto Equinox, um projeto criado pelo Eduardo Pires, mostrando as boas práticas em projetos do mundo .NET.
Além disso, tenho outro exemplo mais simples que é o Alura-CasaDoCodigo, um projeto que criei para um curso daqui da Alura.
Sobre acessar vários bancos, você vai precisar criar mais de um DbContext
e, no AppSettings, pode adicionar várias connectionStrings. Por exemplo:
"ConnectionStrings": {
"Connection_RH": "Data Source=Srv1;Database=Db1;<etc.>",
"Connection_Vendas": "Data Source=Srv2;Database=Db2;<etc.>"
}
O que você acha? Isso te ajuda?
Abs e bons estudos.