2010-05-20 23 views
8

Sé que esto se ha pedido varias veces y he leído todas las publicaciones también, pero todas son muy antiguas. Y considerando que ha habido avances en versiones y lanzamientos, espero que haya nuevas vistas.Entity Framework vs. nHibernate para rendimiento, características generales de Learning Curve

Estamos construyendo una nueva aplicación en ASP.NET MVC y necesitamos finalizar en una herramienta ORM. Nunca hemos usado ORM antes y hemos reducido a dos: nHibernate & Entity Framework.

Realmente necesito algunos consejos de alguien que haya usado ambas herramientas y pueda recomendarlas según la experiencia. Hay tres puntos que me estoy centrando en finalizar -

  1. Rendimiento
  2. curva de aprendizaje
  3. capacidad general

será muy apreciada su consejo.

Best Regards,

+2

.NET 3.5 o .NET 4.0? Le recomendaría que se mantenga alejado de EF 1.0/3.5. –

Respuesta

10

yo usaría Nhibernate. Recogería Sharp Architecture como un gran marco que envuelve NHibernate, ASP.NET MVC y un montón de otras herramientas de código abierto en un todo coherente que le dará una sólida base arquitectónica.

Nhibernate es más maduro que EF4. Está bien respaldado por la comunidad. Siempre y cuando estés dispuesto a ensuciarte las manos de vez en cuando, te gustará. Su soporte para LINQ es actualmente un poco débil pero está mejorando rápidamente. La curva de aprendizaje no es mala, pero cosas como la gestión de sesiones pueden ser un poco confusas al principio. Una de las razones por las que me gusta Sharp Architecture es que tienen todas las cosas de NHibernate que necesitarán y muchas instrucciones sobre cómo usarlo correctamente en un proyecto ASP.NET MVC.

EF4 tiene el sello de aprobación MS. Es bastante bueno ahora, pero aún detrás de NHibernate. Es una opción perfectamente buena y encontrará muchos documentos de MS, MS y eventualmente más desarrolladores familiarizados con los pormenores. También debo mencionar que la gente de Sharp Architecture está agregando soporte para EF4 a su marco general. Seguirán siendo compatibles con NHibernate, pero podrá usar EF4 si lo desea.

+0

Hola, gracias Tom por tu respuesta. Estoy muy inclinado hacia Sharp Arcitecture. Pero mi preocupación es con varios artículos en Internet mencionando problemas de rendimiento con nHibernate. Ahora me di cuenta de que si lo haces bien, probablemente puedas lograr un mejor rendimiento, pero nuevamente mi equipo y yo estamos poniendo nuestras manos por primera vez. – hadi

+1

@hadi: NHibernate no es un problema de rendimiento. El problema de rendimiento es cómo lo usas. Por ejemplo, si utiliza la carga diferida y realiza un bucle sobre un gran conjunto de resultados accediendo a alguna propiedad que causa una E/S de base de datos para cada iteración, el rendimiento es deficiente. Recomiendo obtener una copia del Nhibernate Profiler de http://nhprof.com/ para verificar sus patrones de acceso y mantener un buen rendimiento. –

+0

Gracias amigo, creo que seguiría adelante con nHibernate. Gracias de nuevo por su ayuda :) – hadi

2

Creo que lleva más tiempo aprender NHibernate.

EF proporciona diseñador gráfico, lamentablemente NHibernate no tiene un diseñador genérico. Por cierto, no es un problema. Si diseña en forma controlada por el dominio (DDD), primero diseñará sus entidades y no le importa la estructura de la base de datos (como solía hacerlo), NHibernate se encargará de eso por usted.

EF 4 se acercó a NHibernate. No comenzaría a trabajar con EF 3.5, carece de muchas funciones.

Si piensa que NHibernate es demasiado complicado a primera vista, puede comenzar con los marcos construidos sobre NHibernate. ActiveRecords y Sharp Architect son buenos ejemplos.

AFAIR EF 3.5 solo compatible con SQL Server 2000. No podría manejar los nuevos tipos de datos de SQL Server 2005. No tengo información sobre EF 4, pero supongo que admite estas mejoras.

Si utiliza NHibernate en aplicaciones de Word real, tiene que construir una infraestructura. P.ej. Implementé Unidad de trabajo y repositorio patrones para poder escribir pruebas y crear capas en mi aplicación. Tienes que esperar lo mismo usando EF. Separar y adjuntar entidades en EF 3.5 no fue algo fácil, tuve que escribir métodos de extensión complicados para marcar campos sucios y demás. Espero que lo resolvieron en EF 4. No hay tal problema con NHibernate.

No tiene que escribir consultas HQL en NHibernate, puede usar el proveedor LINQ. Creo que es muy importante. :)

en general NHibernate es un producto maduro con buena comunidad y soporte comercial. EF es joven pero tiene un fuerte respaldo de Microsoft. Ah, y EF es solo algo de Microsoft, mientras que también puedes transferir tu conocimiento de NHibernate a Java. Esto cuenta para ti.

+1

NHibernate tiene un diseñador gráfico. –

+0

Estoy trabajando con SQLite y no sé si los diseñadores gráficos lo soportan. Por favor, publique un enlace, me encantaría usarlo. Me gustaría encontrar un diseñador que pueda aplicar ingeniería inversa a un esquema de base de datos a la asignación de entidades para la mayoría de los DB soportados (incluido SQLite). – artur02

2

Estoy intentando mirar en esto ... Después de la creación de aplicaciones en tanto, NHibernate es definitivamente más poderosa, pero también es bastante torpe, donde EF es muy limpio . Y después de trabajar con Rails/ActiveRecord, ambos son muy ricos en funciones en comparación, por lo que cualquiera de los dos funcionaría.

Me di cuenta de que NHibernate realiza un seguimiento de lo que acaba de ejecutar, y si acaba de ejecutar una declaración, no lo vuelve a ejecutar, por lo que una aplicación diseñada correctamente ejecutará declaraciones de base de datos mínimas. Sé que EF tampoco es exactamente lento, pero no estoy seguro si almacena en caché las declaraciones y los resultados de la misma manera. ¡Para una aplicación grande, esto podría ahorrar algunos recursos de base de datos!

En resumen, NHibernate para funcionalidad y configurabilidad, y EF 4.0 para limpieza y una curva de aprendizaje fácil y rápida. Además, uno debe esperar que EF en la próxima versión o dos también puedan alcanzar o superar a NHibernate en funcionalidad, por lo que puede tener sentido familiarizarse con ambos.

Cuestiones relacionadas