Respuesta

6

Creo que esta es una pregunta oportuna, ya que me preguntaba exactamente lo mismo. Estoy tratando de crear un modelo serio de comercio electrónico y estoy tratando de mantener mis POCO libres de preocupaciones de persistencia, así como tratar de mantenerme fiel al Diseño Dirigido por Dominio. Hasta el momento, soy muy cauteloso, y estoy en la duda sobre si debo enviar un barco a NHibernate. Lo único que me impide hacerlo es que supongo que Microsoft mejorará (y rápidamente).

Algunos de los mayores problemas hasta ahora:

  • Incapacidad para finamente materialización objeto de control. EF llama al constructor zero-arg en su POCO, y este es un comportamiento que no puede cambiar.
  • Sin soporte de enum. La comunidad ha estado gritando, gritando! - por esto, y no ha sucedido. Las soluciones son terribles y contaminan su modelo de dominio.
  • Extraños errores de mapeo al tratar de controlar los nombres de las columnas y las relaciones en la base de datos. Los principales en los que puedo pensar son las llaves compuestas y las relaciones de muchos a muchos. Esto puede solucionarse, y supongo que estos serán corregidos por el tiempo de liberación, pero son frustrantes, no obstante.
  • Mal SQL. También hago trabajo de DBA, y el SQL que genera EF (con o sin Code-First) es atroz.

Y esto es solo la punta del iceberg: solo estoy empezando a aprender EF4 y me estoy encontrando con obstáculos terribles. Cuando pienso en más razones, las agregaré aquí. Todavía estoy luchando con eso.

(Me pregunto si la comunidad le dará otro voto de "no confianza.")


Más:

  • Para añadir al problema "Extraño errores de asignación": No se puede controle el nombre de una columna si participa en una relación autorreferencial (por ejemplo, si tiene una jerarquía). Supongo que esto se solucionará en la versión final.
  • Falta de procesamiento por lotes, lo que genera múltiples viajes de ida y vuelta a la base de datos. Por ejemplo, ¿cómo eliminas un montón de elementos de una colección? Cargue todas las entidades en la memoria y elimínelas de a una por vez. Una queja más pequeña es la cantidad de hits de DB cuando se inserta en tablas que participan en una relación de herencia.
  • Ninguna manera inteligente de lidiar con los cambios del modelo. A EF Code-First le encanta abandonar completamente su base de datos si necesita cambiar el esquema.
  • Pocos puntos de extensibilidad. Literalmente puede contar, por un lado, la cantidad de eventos a los que EF4 le permite suscribirse (y Code-First no proporciona mucho más).
+0

Esto es muy interesante y útil. Espero que más personas SO comenten antes de que los trolls cierren este hilo. –

+0

Me gustaría saber más, también, ya que estoy/muy/en conflicto con la obligación de comprometerme con EF4 Code-first. – anon

+0

Esta es una muy buena lista. Todos los puntos válidos que he experimentado en los últimos meses. También arrojaría en EF4 la falta de soporte de tipo de datos 'GEOGRAPHY' (SQL Server), y la imposibilidad de pasar los tipos de tabla definidos por el usuario (también SQL Server) a los procesos almacenados. Para combatir el primero, tuve que usar desencadenadores, para combatir el último me degradé al clásico ADO.NET. – RPM1984

0

En cuanto a mí - yo prefiero EF pero con algunas mejoras.Básicamente EF te ofrece las siguientes ventajas:

  • Visual Editor del modelo de base de datos
  • /modelo asistente de actualización (en lugar de cambios manuales XML - lo que es terrible para mí)

Además, estoy el uso de herramientas 3-rd partido comerciales basados ​​en EF y L2S (LinqConnect) que proporcionan para mí las siguientes características:

+0

NHibernate también tiene muchos diseñadores diferentes. Puede usarlo con fluidez y automatppings sin xml – Sly

+0

¿Puede publicar un enlace para estos diseñadores? – JackD

Cuestiones relacionadas