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 cómo dividir mejor las tablas en diferentes modelos (EDMX o DbContext si primero vamos a codificar). Puedo pensar en algunas estrategias de inmediato:
-
Dividir por esquema
Tenemos nuestras tablas divididas en una docena de esquemas. Podríamos hacer un modelo por esquema. Sin embargo, esto no es perfecto porque dbo sigue 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 varios modelos, lo que aumenta 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. Así que tendremos diferentes modelos para cada aplicación, proyecto, módulo o pantalla, dependiendo de cuán granulares deseamos obtener. El problema que veo con esto es que hay ciertas tablas que inevitablemente deben usarse en todos los casos, como Usuario o AuditHistory. ¿Agregamos esos a cada modelo (creo que viola DRY), o están en un modelo separado que es usado por cada proyecto? -
No dividir en absoluto: un modelo gigante
Obviamente, esto es simple desde una perspectiva de desarrollo, pero según mi investigación y mi intuición, parece que podría funcionar de manera terrible, tanto en tiempo de diseño, tiempo de compilación y posiblemente en tiempo de ejecución.
¿Cuál es la mejor práctica para usar EF contra 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 funcione mejor que lo que tengo arriba?
Además, ¿es esto un problema en otros ORM como NHibernate? Si es así, ¿han encontrado mejores soluciones que EF?