Escrevi esta resposta há cerca de quatro anos e minha opinião não mudou. Mas desde então, houve desenvolvimentos significativos na frente de microsserviços. Adicionei notas específicas sobre microsserviços no final ...
Eu vou pesar contra a idéia, com experiência no mundo real para apoiar meu voto.
Fui levado a um aplicativo grande que tinha cinco contextos para um único banco de dados. No final, acabamos removendo todos os contextos, exceto um - revertendo para um único contexto.
A princípio, a ideia de múltiplos contextos parece uma boa ideia. Podemos separar nosso acesso a dados em domínios e fornecer vários contextos leves e limpos. Parece DDD, certo? Isso simplificaria nosso acesso a dados. Outro argumento é para o desempenho, pois apenas acessamos o contexto que precisamos.
Mas, na prática, à medida que nosso aplicativo crescia, muitas de nossas tabelas compartilhavam relacionamentos entre nossos vários contextos. Por exemplo, as consultas à tabela A no contexto 1 também exigiam a junção da tabela B no contexto 2.
Isso nos deixou com algumas escolhas ruins. Poderíamos duplicar as tabelas nos vários contextos. Nós tentamos isso. Isso criou vários problemas de mapeamento, incluindo uma restrição EF que requer que cada entidade tenha um nome exclusivo. Então, acabamos com entidades nomeadas Person1 e Person2 nos diferentes contextos. Pode-se argumentar que esse projeto foi ruim da nossa parte, mas, apesar dos nossos melhores esforços, é assim que nosso aplicativo realmente cresceu no mundo real.
Também tentamos consultar os dois contextos para obter os dados necessários. Por exemplo, nossa lógica de negócios consultaria metade do que era necessário no contexto 1 e a outra metade no contexto 2. Isso apresentava alguns problemas importantes. Em vez de executar uma consulta em um único contexto, tivemos que realizar várias consultas em diferentes contextos. Isso tem uma penalidade de desempenho real.
No final, a boa notícia é que foi fácil remover os múltiplos contextos. O contexto pretende ser um objeto leve. Portanto, não acho que o desempenho seja um bom argumento para vários contextos. Em quase todos os casos, acredito que um único contexto é mais simples, menos complexo e provavelmente terá um desempenho melhor, e você não precisará implementar várias soluções alternativas para fazê-lo funcionar.
Pensei em uma situação em que múltiplos contextos poderiam ser úteis. Um contexto separado pode ser usado para corrigir um problema físico no banco de dados no qual ele realmente contém mais de um domínio. Idealmente, um contexto seria um para um em um domínio, que seria um para um em um banco de dados. Em outras palavras, se um conjunto de tabelas não estiver relacionado às outras tabelas em um determinado banco de dados, elas provavelmente deverão ser extraídas para um banco de dados separado. Sei que isso nem sempre é prático. Mas se um conjunto de tabelas for tão diferente que você se sinta à vontade para separá-las em um banco de dados separado (mas você optar por não), eu poderia ver o caso de usar um contexto separado, mas apenas porque na verdade existem dois domínios separados.
Em relação aos microsserviços, um único contexto ainda faz sentido. No entanto, para microsserviços, cada serviço teria seu próprio contexto, que inclui apenas as tabelas de banco de dados relevantes para esse serviço. Em outras palavras, se o serviço x acessar as tabelas 1 e 2 e o serviço y acessar as tabelas 3 e 4, cada serviço terá seu próprio contexto exclusivo, que inclui tabelas específicas para esse serviço.
Estou interessado em seus pensamentos.