2010-02-04 20 views
13

Acabo de leer este article sobre Entity Framework 4 (en realidad, la versión 2).MS Entity Framework VS NHibernate y sus contribuciones derivadas (FluentNHibernate, Linq for NHibernate)

Entity Framework parece ofrecer una gran mejora con respecto a su primer lanzamiento. Por lo tanto, nunca he usado EF en ningún proyecto, ya que creo que EF no es lo suficientemente maduro en comparación con NHibernate.

y sus actuales contribuciones de FluentNHibernate y Linq for NHibernate by Ayende Rahien

Mi sensación es que Microsoft está tratando de ganar el único terreno que ha perdido en favor de NHibernate cuando la segunda versión de NHibernate salió. Sin embargo, mis preocupaciones son las siguientes (no en orden particular):

  • ¿EF4 tiende a ser menos detallado en XML?
  • ¿EF4 será compatible con las áreas de almacenamiento de datos subyacentes que no sean solo SQL Server?
  • ¿Cuáles son los mayores beneficios de ir con EF4 en lugar de FluentNHibernate o NHibernate en sí?

NHibernate es una gran herramienta, supongo que todos están de acuerdo. Debido a su predecesor Hibernate, podemos encontrar fácilmente documentaciones y tutoriales y aplicaciones de muestra para familiarizarnos con él. Este no es el caso de FluentNHibernate. Particularmente según el proyecto en el que estoy trabajando actualmente, que exige que investigue más sobre NHibernate y sus opciones (por ejemplo, FluentNHibernate) para documentar las reglas de uso y las mejores prácticas de la tecnología NHibernate y FluentNHibernate. Por lo tanto, al estar esposado con VB.NET, ser un desarrollador de C-Style, no puedo encontrar algunas equivalencias de sintaxis en VB.NET para los ejemplos proporcionados, aunque hice mi camino hasta el momento.

Creo que NHibernate es la mejor opción, pero como consultor de software, no puedo (no quiero) perder importantes cambios tecnológicos, mejoras y evolución.

A pesar de los malos comentarios que leí sobre EF1, EF4 parece ser muy prometedor. ¿Qué piensan todos acerca de las avenidas NHibernate y Entity Framework? En cuanto a mí, estoy desconcertado con todas esas lecturas. Necesito que saques la cabeza fuera del agua.

Gracias a todos!

+0

Basado en las respuestas de las respuestas, he aceptado las que han recibido más votos positivos. Además, todos ustedes tienen buenos comentarios y respuestas y me han iluminado para una buena decisión sobre mis estudios futuros de ambas tecnologías. Deseo agradecerles a todos, y lamento no poder aceptar todas sus respuestas como "la solución" de mi pregunta. ¡Gracias! –

Respuesta

3

Tome esto con un grano de sal. No soy ningún tipo de autoridad en las herramientas ORM, pero aquí va ...

Uno de los mayores beneficios que veo en EF es la GUI para el mapeo. OMI, esto ahorra mucho tiempo, pero es probable que sea la razón por la que las correlaciones EF XML son tan prolijas. No están hechos para ser tratados manualmente, desafortunadamente. Si cambiará o no, no lo sé. Lo que sí sé es que la GUI que proporciona EF solía ser muy escamosa en versiones anteriores. Y aún escucho acerca de personas quejándose de que no se está escalando bien, especialmente en esquemas más grandes y complejos en los que simplemente se pierden cosas y terminas jugando con las asignaciones directamente. Mi opinión es que los mapas XML se volverán menos detallados a medida que EF madure. También tiene el soporte de mapeo fluido en EF, que también es útil. Finalmente, otra cosa importante es la capacidad de cambiar las plantillas de código que genera EF, es decir, si se favorece el diseño basado en bases de datos en lugar del enfoque de primer diseño.

Otra ventaja es que proviene de Microsoft y tienen suficiente masa para hacer de este un marco realmente dope. Ha crecido enormemente en los últimos años. Creo que estará en el mismo terreno con NHibernate en poco más de un año.Por ahora, creo que NHibernate es una mejor opción. Es más estable y maduro. Relativo, fácil de configurar y lo más importante, un mejor desempeño. Creo que si diseñas sabiamente, pasar de uno a otro será pan comido.

EF es solo una abstracción. Creo que hay proveedores para Oracle, así que no veo por qué no podría haber más agregados a medida que crece.

+0

Gracias! Ni siquiera sabía que había una GUI para diseñar todo. Pensé que tenías que buscar el enfoque desde el suelo, al igual que NHibernate. Esto explica de manera plausible la verbosidad de los archivos de mapeo XML.No sabía que permitía la creación de bases de datos, que todavía hoy es un enfoque común. ¿Sabe si permite ingeniería inversa para sistemas existentes reescritos para .NET, pero donde queremos mantener intacta la base de datos existente? –

+3

NHibernate tiene GUI/Visual Designers. –

+2

EF4 permite un enfoque de primer diseño. Le permite conectar su propio modelo de dominio y asignarlo a su estructura de datos utilizando mapas XML o un enfoque basado en código fluido similar a Fluent Nhibernate. Otra opción sería utilizar la estructura existente y crear un modelo de dominio basado en ella. ¿Cuál es el enfoque basado en la base de datos? EF4 le permite ajustar las plantillas que utiliza para la generación de dominio, lo que puede eliminar con éxito parte del engorro que EF escupe. –

4

¿EF4 tiende a ser menos detallado en XML?

En general, no he visto ninguna indicación de que el XML sea drásticamente diferente. Microsoft proporciona una interfaz Fluent like para EF en v4, pero es una descarga adicional/separada.

¿EF4 será compatible con otro almacén de datos subyacente aparte de SQL Server?

Es compatible ahora y seguirá siendo compatible en el futuro. LinqToSql solo es SQL Server, pero EF nunca ha sido SQL Server.

¿Cuáles son los mayores beneficios de ir con EF4 en lugar de FluentNHibernate o NHibernate en sí?

Honestamente, no hay muchos. Hay pequeñas cosas aquí y allá que son diferentes, pero en general, NHibernate aún está por delante de EntityFramework, incluso en EFv4.

Como consultor, es probable que sea digno de su tiempo para convertirse en un experto en tanto NHibernate y Entity Framework. Probablemente continuarás viendo a ambos en el mundo real. Microsoft tiende a tener poca capacidad de atención cuando se trata de acceso a datos, por lo que no está claro dónde estará Entity Framework dentro de unos años. Debido a que es de Microsoft, puede estar seguro de que muchos desarrolladores usarán EF.

+0

Tuve el encabezado de que EF era solo servidor SQL. ¡Probablemente rumores! =) He trabajado muy poco con la implementación LinqToSql de un ORM, y no me disgustó. Aunque fue un buen enfoque después de todo, lo mencionaste, era SQL Server solamente. No podría usarlo por eso. Como en su mayoría un tipo de desarrollador de framework, necesito ser fluido con mi código para reaccionar rápidamente. De todos modos, supongo que tienes razón al decir que tanto EF como NH coexistirán en un futuro cercano. Muchas gracias por su punto de vista! Realmente ayudas a iluminar mis pensamientos sobre el tema. –

5

No sé casi nada sobre EF, pero una rápida revisión de los enlaces proporcionados me lleva a creer que EF no es equivalente a la funcionalidad de automatización de fluidez de NHibernate.

Editar: Algunos de los comentaristas me señaló a los enlaces que indica que hay algunos automapping en la FE, pero no es realmente claro si es tan poderoso como la HNF (por ejemplo, ser capaz de AutoMAPA colecciones de otros objetos) .

Personalmente, Me encanta ser capaz de diseñar POCOs de una manera OO, y dejar que la herramienta de manejar todo el trabajo pesado de la cartografía a una base de datos relacional.

FNH sigue teniendo la capacidad de automatización más potente, hasta donde yo sé.

Ir a Fluent NHibernate Automapping para obtener más información.

+0

Gracias por su respuesta! Como tal, voy a descubrir la potencia ofrecida por Fluent NHibernate, por lo que aún no he explorado la función Automapping. Leí algunas líneas al respecto, pero necesito hacer que FNH funcione al principio para poder entender lo que Automapping hace por el usuario. ¡Ese es un buen punto! Me haces pensar en explorar FNH a un nivel más profundo. Tal vez vale la pena convertirse en algún tipo de experto con esa tecnología. ¡Gracias! –

+2

En realidad, EF ofrece una utilidad de creación de configuración que es muy similar a la de NHibernate Fluent. Aquí hay un artículo que habla de ello: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx –

+0

@ user68137: ¡Gracias! para este enlace No perderé la oportunidad de visitar este enlace. –