Estou trabalhando com um banco de dados do SQL Server com mais de 1000 tabelas, outras centenas de visualizações e vários milhares de procedimentos armazenados. Esperamos começar a usar o Entity Framework para nossos projetos mais recentes e estamos trabalhando em nossa estratégia para fazê-lo. O que mais me preocupa é a melhor forma de dividir as tabelas em diferentes modelos (EDMX ou DbContext, se for o código primeiro). Eu posso pensar em algumas estratégias logo de cara:
- Dividir por esquema
Temos nossas tabelas divididas em provavelmente uma dúzia de esquemas. Poderíamos fazer um modelo por esquema. Isso não é perfeito, no entanto, porque o dbo ainda acaba sendo muito grande, com mais de 500 tabelas / visualizações. Outro problema é que certas unidades de trabalho acabam tendo que fazer transações que abrangem vários modelos, o que aumenta a complexidade, embora eu assuma que a EF torne isso bastante simples. - Dividir por intenção
Em vez de se preocupar com esquemas, divida os modelos por intenção. Portanto, teremos modelos diferentes para cada aplicativo, projeto, módulo ou tela, dependendo da granularidade que queremos obter. O problema que vejo com isso é que existem certas tabelas que inevitavelmente precisam ser usadas em todos os casos, como User ou AuditHistory. Nós os adicionamos a todos os modelos (viola o DRY, eu acho) ou estão em um modelo separado que é usado por todos os projetos? - Não divida nada - um modelo gigante
Isso é obviamente simples do ponto de vista do desenvolvimento, mas da minha pesquisa e da minha intuição parece que ele pode ter um desempenho terrível, tanto em tempo de design, compilação e possivelmente em tempo de execução.
Qual é a melhor prática para usar o EF em um banco de dados tão grande? Especificamente, quais estratégias as pessoas usam no design de modelos para esse volume de objetos de banco de dados? Existem opções que eu não estou pensando que funcionam melhor do que as que tenho acima?
Além disso, isso é um problema em outras ORMs como o NHibernate? Em caso afirmativo, eles apresentaram soluções melhores que a EF?