Pregunta

Si comienza un nuevo proyecto, ¿qué usaría para su ORM NHibernate o LINQ y por qué?Cuáles son los pros y los contras de cada uno.

editar:LINQ to SQL no solo LINQ (gracias @Jon Limjap)

¿Fue útil?

Solución

Me hice una pregunta muy similar, excepto que en lugar de NHibernate estaba pensando en WilsonORM, que considero bastante bueno.

Me parece que hay muchas diferencias importantes.

LINQ:

  • no es una herramienta ORM completa (puede llegar allí con algunas bibliotecas adicionales como el último marco Entity; personalmente considero que la arquitectura de esta última tecnología de MS tiene aproximadamente 10 años en comparación con otros marcos ORM)
  • consulta principalmente "lenguaje" que admite intellisense (el compilador verificará la sintaxis de su consulta)
  • se utiliza principalmente con Microsoft SQL Server
  • es de código cerrado

NHibernate:

  • es una herramienta ORM
  • tiene un lenguaje de consulta bastante limitado sin intellisense
  • Se puede utilizar con casi cualquier DBMS para el que tenga un proveedor de base de datos.
  • es de código abierto

Realmente depende.Si desarrolla una aplicación de escritorio enriquecida (Windows) donde necesita construir objetos, trabajar con ellos y al final conservar sus cambios, entonces recomendaría un marco ORM como NHibernate.

Si desarrolla una aplicación web que generalmente solo consulta datos y solo ocasionalmente escribe algunos datos en la base de datos, le recomendaría un buen lenguaje de consulta como Linq.

Como siempre, depende.:-)

Otros consejos

Err...hay LINQ para NHibernate.

Quizás lo que quieres decir es cuál usar:

  • LINQ a SQL
  • NHibernate

Prefiero NHibernate.

LINQ to SQL es bastante liviano, pero está un poco más estrechamente acoplado a su estructura de datos, a diferencia de NHibernate, que es bastante flexible en términos de los tipos de definiciones de objetos que se pueden asignar a sus estructuras de tablas.

Por supuesto, eso no quiere decir que LINQ to SQL no tenga usos:este mismo sitio web lo utiliza.Creo que es bastante útil para comenzar a ejecutar aplicaciones pequeñas donde el esquema de la base de datos no es tan masivo.

Empezar con NHibernate es una mala idea.Muestra un buen rendimiento sólo con ajustes adecuados.Intente utilizar EFv4 para proyectos grandes y L2S (tal vez productos de terceros) para proyectos pequeños y medianos.Estos productos son más convenientes y flexibles que NHibernate y le permiten comenzar rápidamente.

no es una lista completa

Linqtosql Pro:

  • mejor soporte de herramientas
  • buen proveedor de linq
  • Es fácil empezar cuando db-schema == clases -

Estafa:

  • no flexible (es decir, db-schema! = clases)
  • sólo es compatible con MS SQL Server
  • sin cascada (guardar, actualizar...no cae en cascada a los objetos referenciados)

NHibernate Pro:

  • muchos rdbms son compatibles con ootb
  • rico en funciones
  • muy flexible para casi todos los casos de esquina
  • fuente abierta

Estafa:

  • no es tan fácil para empezar
  • no de EM
  • Hay muchas herramientas, pero hay que buscarlas.

Entre los 2 ORM

Elegiría LinqToSql si:

  • esquema-db == clases
  • Utilice únicamente MS SQL Server
  • la tienda solo permite productos MS

Elegiría Nhibernate si:

  • modelo de objetos más rico
  • esquema de base de datos heredado
  • DB que no sea MS SQL Server o soporte múltiple
  • Rendimiento crítico (creo que NH tiene más funciones para optimizar el rendimiento que LinqToSql)

NOTA:esta es mi opinión personal.Me ocupo principalmente de bases de datos heredadas (locas) y trabajos ETL complejos donde el modelo de objetos ayuda mucho en comparación con SQL.

No uso (ni siquiera conozco) NHibernate, solo quiero dar mi testimonio:Utilizo LINQ to SQL desde hace aproximadamente 2 años con bases de datos MySQL y PostgreSQL (usando DbLinq en Windows, usando Mononucleosis infecciosa en Linux y Mac OS X).

Por lo tanto, LINQ to SQL NO se limita a los productos de Microsoft.

Puedo confirmar que LINQ to SQL es muy adecuado para proyectos pequeños y medianos, o proyectos grandes en los que se tiene el control absoluto de la estructura de la base de datos.Como indican las revisiones, LINQ to SQL tiene algunas limitaciones que lo convierten en una herramienta inapropiada cuando no existe un mapeo directo entre las tablas de la base de datos y las clases de entidad.

Nota :LINQ to SQL no admite relaciones de muchos a muchos (pero esto se puede lograr fácilmente con unas pocas líneas de código).

El principal inconveniente de NHibernate es la imposibilidad de hacer uso de llamadas a métodos.No se pueden traducir a SQL.Para evitarlo, hay que recrear árboles de expresión, lo cual es difícil de hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top