Estoy trabajando con una base de datos de SQL Server con más de 1000 tablas, otros cientos de vistas y varios miles de procedimientos almacenados. Estamos buscando comenzar a usar Entity Framework para nuestros proyectos más nuevos, y estamos trabajando en nuestra estrategia para hacerlo. Lo que me preocupa es la mejor manera de dividir las tablas en diferentes modelos (EDMX o DbContext si vamos a codificar primero). Puedo pensar en algunas estrategias desde el principio:
- Dividido por esquema
Tenemos nuestras tablas divididas en probablemente una docena de esquemas. Podríamos hacer un modelo por esquema. Sin embargo, esto no es perfecto, porque dbo todavía termina siendo muy grande, con más de 500 tablas / vistas. Otro problema es que ciertas unidades de trabajo terminarán teniendo que realizar transacciones que abarcan múltiples modelos, lo que se suma a la complejidad, aunque supongo que EF lo hace bastante sencillo. - Dividir por intención
En lugar de preocuparse por los esquemas, divida los modelos por intención. Por lo tanto, tendremos diferentes modelos para cada aplicación, proyecto, módulo o pantalla, dependiendo de qué tan granulares queramos obtener. El problema que veo con esto es que hay ciertas tablas que inevitablemente deben usarse en todos los casos, como User o AuditHistory. ¿Los agregamos a cada modelo (creo que viola DRY), o son aquellos en un modelo separado que es utilizado por cada proyecto? - No se divida en absoluto: un modelo gigante
Esto es obviamente simple desde una perspectiva de desarrollo, pero desde mi investigación y mi intuición parece que podría funcionar terriblemente, tanto en tiempo de diseño, tiempo de compilación y posiblemente tiempo de ejecución.
¿Cuál es la mejor práctica para usar EF en una base de datos tan grande? Específicamente, ¿qué estrategias utilizan las personas para diseñar modelos contra este volumen de objetos DB? ¿Hay opciones en las que no estoy pensando que funcionen mejor que las que tengo arriba?
Además, ¿es esto un problema en otros ORM como NHibernate? Si es así, ¿han encontrado alguna solución mejor que EF?