La aplicación que estoy creando actualmente ha estado utilizando procedimientos almacenados y modelos de clase hechos a mano para representar objetos de la base de datos. Algunas personas han sugerido usar Entity Framework y estoy considerando cambiar a eso ya que no estoy tan avanzado en el proyecto. Mi problema es que siento que las personas que defienden EF solo me dicen el lado bueno de las cosas, no el lado malo :)
Mis principales preocupaciones son:
- Queremos la validación del lado del cliente utilizando anotaciones de datos, y parece que tengo que crear los modelos del lado del cliente de todos modos, así que no estoy seguro de que EF ahorre tanto tiempo de codificación
- Nos gustaría mantener las clases lo más pequeñas posible al pasar por la red, y he leído que usar EF a menudo incluye datos adicionales que no son necesarios
- Tenemos una capa de base de datos compleja que cruza múltiples bases de datos, y no estoy seguro de que EF pueda manejar esto. Tenemos una base de datos común con cosas como usuarios, códigos de estado, tipos, etc. y múltiples instancias de nuestras bases de datos principales para diferentes instancias de la aplicación. Las consultas SELECT pueden y consultarán en todas las instancias de las bases de datos, sin embargo, los usuarios solo pueden modificar los objetos que están en la base de datos en la que están trabajando actualmente. Pueden cambiar bases de datos sin volver a cargar la aplicación.
- Los modos de objeto son muy complejos y a menudo hay bastantes combinaciones involucradas
Los argumentos para EF son:
- Concurrencia. No tendría que codificar los controles para ver si el registro se actualizó antes de cada guardado
- Codigo de GENERACION. EF puede generar modelos de clase y POCO parciales para mí, sin embargo, no estoy seguro de que esto realmente me ahorre mucho tiempo, ya que creo que aún necesitaríamos crear modelos del lado del cliente para la validación y algunos métodos de análisis personalizados.
- Velocidad de desarrollo ya que no necesitaríamos crear los procedimientos almacenados CRUD para cada objeto de base de datos
Nuestra arquitectura actual consiste en un servicio WPF que maneja llamadas a la base de datos a través de procedimientos almacenados parametrizados, objetos POCO que van hacia / desde el servicio WCF y el cliente WPF, y el propio cliente de escritorio WPF que transforma los POCO en modelos de clase con el propósito de validación y El enlace de datos.
Entonces mi pregunta es, ¿es EF adecuado para esto? ¿Hay alguna trampa sobre EF que desconozco?