2010-10-13 14 views
11

Estamos intentando decidir si vale la pena usar el marco de entidad 4 en un proyecto. Con ese fin, creo que un buen lugar para comenzar sería compararlo con nhibernate, que está maduro y probado por años de uso para tener todas las características que la gente necesita para aplicaciones empresariales, y descubrir qué características nHibernate tiene que falta EF4. fuera.¿Qué tiene nhibernate, esa entidad framework 4 no se encuentra?

Así que para empezar, mi limitado conocimiento:

  • Almacenamiento en caché: NHib tiene caché L2, mientras que el almacenamiento en caché EF4 tiene mala
  • NHibernate tiene proveedores en más DBS, mientras que EF necesita complementos para no (?) SQL de dB
  • NHib es más rápido/más optimizado
  • NHib tiene puntos de extensión (por ejemplo, tipos de campos personalizados)
  • ... ¿qué más?

encontrado algunos artículos:

http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases-Part2.aspx

+0

Personalmente, creo que la flexibilidad y extensibilidad de NHibernate lo convierten en el producto superior. Parece que puedes doblegar a NH para que haga más por ti que EF. Solo mi 2c ... Aren

+0

Aren, no es necesario ser tímido, ¡eso es algo perfectamente válido para agregar a la lista! – Chris

+2

Esto debería ser probablemente un CWiki, ya que es subjetivo (para los fanáticos de EF y los fanáticos de NHibernate). Y lo más probable es que explote en un argumento "que es mejor". – RPM1984

Respuesta

1

estoy usando Entity Framework en una aplicación de escritorio, y aunque estoy bastante satisfecho con ella, hay una desventaja con el uso de objetos DateTime - no se puede acceder a las propiedades, lo que es más importante, el DateTime.Date propiedad.

Además, no puede usar objetos externos de Entity Framework (es decir: objetos que no están en el contexto de Entity Framework, como maping Journal a JournalDto) en sus consultas LINQ, es decir. al mapear, primero debe ejecutar la consulta con ToList() y luego hacer su mapeo.

En cuanto a las herramientas de EF con errores, no noté nada sobre eso, pero probablemente solo arañé la superficie del marco.

+0

La declaración 2 no es correcta, puede usar las propiedades de navegación para recuperar los objetos de "clave externa" directamente en sus consultas, O puede hacer explícitamente las uniones. Además, puede usar la carga ansiosa (.Include) para cargar explícitamente los objetos (si ha desactivado la carga diferida). – RPM1984

+0

¡Eso es bastante extraño sobre las fechas! ¿Qué sucede cuando intentas acceder a las propiedades? No puedo ver cómo un horario de trabajo solo puede funcionar a la 'mitad', dado que es un tipo primitivo. – Chris

+0

RPM: lee la oración con una entonación incorrecta. Espero que mi edición lo aclare. No quise decir relaciones de claves extranjeras. – Femaref

3

NHibernate admite otras bases de datos aparte de SQL Server, p. si estás usando Oracle Entity Framework en sí está diseñado para admitir un proveedor múltiple, pero el único proveedor integrado que se obtiene es para SQL Server. Oracle aún no ha lanzado ningún proveedor y existen proveedores gratuitos comerciales o en parches para otras bases de datos. Entonces, si se admite el soporte de múltiples DB, entonces NHibernate está por delante de EF 4 en este momento.

+0

Gracias por eso. Lo agregaré a la lista. Sin embargo, no es un problema para nosotros, ya que solo usamos servidores SQL. – Chris

2

Aunque no tengo mucha experiencia con EF, uno de los mayores puntos de venta de NHibernate son sus puntos de extensibilidad. User Types y Event Listeners son excelentes ejemplos de cuán personalizables son todos los aspectos de la experiencia de NHibernate.

+0

Saludos, eso es bueno saber – Chris

5

Probé con entity framework cuando salió por primera vez y encontré que la configuración era demasiado complicada cuando hacía algo que no es estándar (con cualquier aplicación de la vida real, las cosas no son tan perfectas como en los ejemplos). Con nhibernate, las complejidades se abordaron con bastante facilidad en archivos de mapeo muy legibles. Los archivos de mapeo de Entity Framework no eran tan legibles.

+0

Ya sabes, esa ha sido exactamente mi experiencia. Si sales de sus límites estrechos de las formas esperadas de hacer las cosas, realmente eres golpeado con paredes de complicación. – Chris

Cuestiones relacionadas