¿EF vs NHibernate? ¿Esa es la pregunta?

El martes 16 estuve hablando de Entity Framework en el Webcast de SecondNug. La idea del Webcast era crear cultura de modelado de entidades sobre modelos relacionales y fomentar el uso de los ORM.

Una de las slides que presenté enseñaba una comparativa de uso entre Entity Framework y NHibernate.

efvsnh_1

Esta comparativa es del 2009 y ya han realizado una revisión de la misma, ya que los desarrolladores de NHibernate comentaron que no se realizó en igualdad de condiciones. Podemos consultar esta revisión en el siguiente post.

El objetivo de esta slide pasaba porque no le diéramos más importancia a un orm o a otro en función de su rendimiento, si analizamos los datos podemos extraer que EF es más potente en algunas cuestiones y que NHibernate lo es en otras. Aún así, siempre encontraremos algún método en el que utilizando algún tipo de artefacto que el otro no emplee se obtendrá un mejor rendimiento.

Creo que tanto NHibernate como Entity Framework son dos grandes ORM y que utilicemos uno u otro tendría que ser cuestión de evaluar las herramientas y diseñadores que tenemos para trabajar con ellos.

Igual que la gente de NHibernate comentó que el test no se realizó en igualdad de condiciones, los desarrolladores de Enfity Framework podrán decir que por qué no se realizaron los test con Entity Framework 4, que las consultas que utilizaron en el test no son las óptimas, etc.

Esta no es nuestra guerra, nuestra guerra pasa porque empecemos a utilizar un ORM en nuestras aplicaciones y que modelemos nuestros sistemas.

Me iba a poner a mejorar el código de test y actualizarlo a EF4, pero creo que no vale la pena seguir con estas comparativas. Mi elección va a ser Entity Framework 4 porque las herramientas que tenemos en Visual Studio 2010 son casi insuperables y porque la curva de aprendizaje es inferior a utilizar otro framework.

 

Saludos a todos…

13 comentarios sobre “¿EF vs NHibernate? ¿Esa es la pregunta?”

  1. Hola Alberto,

    me estoy iniciando en el mundillo de EF. Por ahora tengo hecho una aplicación muy chorra de gestión de los DVDs de mi padre, pero la verdad es que ha sido una gozada programarla con EF.

    Resulta que me gustaria llevarlo a mi entorno laboral. En la aplicación en la que estoy trabajando, tenemos 7 servidores que atacan a una misma base de datos. Me gustaria saber si utilizando EF, si un servidor hace un cambio en un valor de una celda, otro servidor se daría cuenta.

    Muchas gracias.

  2. Hola Vicente, para esto tendrías que trabajar con los modos de concurrencia o utilizar la plantilla de Self Tracking que viene con Visual Studio 2010.

    Con el Change Tracking habilitado, cuando dos clientes actualizan la misma entidad, al segundo que realiza la actualización obtendrá una exception de concurrencia.

    Si no me he explicado, me lo dices que te puedo mandar un código de ejemplo.

  3. A parte, de no entrar en la pregunta. Lo más importante sería saber si EF será por fin la apuesta de microsoft como acceso a datos. O será otra tecnología a sustituir.

  4. sabemos que con Microsoft nunca se sabe, pero por lo que he podido ver, están utilizando EF en muchos de sus productos y necesitaban un ORM en condiciones (LINQ To SQL no tiene todas las funcionalidades que han desarrollado en EF)

  5. con el framework 3.5 se puede desarrollar con la v1 de entity framework.

    si vas a empezar con EF, te recomiendo que empices con framework 4 en visual srmtudio 2010

  6. Hay mucha diferencia? El problema es que en el trabajo utilizamos el 3.5 SP1 aunque todavía no utilizamos nada de EF, así que no sé por donde empezar…

  7. La primera versión de EF tiene sus limitaciones, puede servirte para empezar con EF y probar el framework. También para probar puedes utilizar la RC de vs2010 o vs2010 express.

  8. Gracias Alberto,

    Como tengo el libro de Unai y Octavio empezaré con la v1 y probaré esto que comentas del ChangeTracking, a ver si lo puedo aplicar en el proyecto.

    Gracias!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *