c# - icriterion - NHibernate o LINQ to SQL
nhibernate sql query string (6)
El principal inconveniente de NHibernate es la imposibilidad de hacer uso de llamadas a métodos . No se pueden traducir a SQL. Para eludir eso, tienes que recrear árboles de expresión que es difícil de hacer.
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)
Errr ... hay LINQ para NHibernate .
Quizás lo que quieres decir es qué usar:
- LINQ a SQL
- NHibernate
Prefiero NHibernate.
LINQ to SQL es bastante liviano, pero está un poco más unido a su estructura de datos, a diferencia de NHibernate, que es bastante flexible en cuanto a los tipos de definiciones de objetos que pueden asignarse a las estructuras de su tabla.
Por supuesto, eso no quiere decir que LINQ to SQL no tiene ningún uso: este mismo sitio web lo usa. Creo que es bastante útil comenzar a usar aplicaciones pequeñas donde el esquema de la base de datos no es tan masivo.
Me he hecho una pregunta muy similar, excepto que en lugar de NHibernate estaba pensando en WilsonORM, que considero bastante agradable.
Me parece que hay muchas diferencias importantes.
LINQ:
- no es una herramienta completa de ORM (puede obtenerla con algunas bibliotecas adicionales, como el último marco de Entity; personalmente considero que la arquitectura de esta última tecnología de MS tiene unos 10 años de antigüedad en comparación con otros marcos ORM)
- está consultando principalmente "lenguaje" que admite intellisense (el compilador verificará la sintaxis de su consulta)
- se usa principalmente con Microsoft SQL Server
- es fuente cerrada
NHibernate:
- es la herramienta ORM
- tiene un lenguaje de consulta bastante limitado sin intellisense
- se puede usar con casi cualquier DBMS para el que tenga un proveedor de DB
- es de código abierto
Realmente depende. Si desarrolla una aplicación de escritorio Rich (Windows) donde necesita construir objetos, trabajar con ellos y al final persistir en sus cambios, entonces recomendaría ORM framework como NHibernate.
Si desarrolla una aplicación web que generalmente solo consulta datos y solo ocasionalmente escribe algunos datos en la BD, le recomendaría un buen lenguaje de consultas como Linq.
Entonces, como siempre, depende. :-)
No uso (o ni siquiera sé) NHibernate, solo quiero dar mi testimonio: utilizo LINQ to SQL desde hace 2 años con las bases de datos MySQL y PostgreSQL (usando DbLinq en Windows, usando Mono en Linux y Mac OS X).
Por lo tanto, LINQ to SQL NO se limita a productos de Microsoft.
Puedo confirmar que LINQ to SQL es muy adecuado para proyectos pequeños y medianos, o grandes proyectos 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 hacen una herramienta inapropiada cuando no hay una asignación directa 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).
no es una lista completa
LinqToSQL Pro:
- mejor soporte de herramienta
- buen proveedor de linq
- Es fácil comenzar cuando db-schema == classes -
Estafa:
- no flexible (es decir, db-schema! = classes)
- solo es compatible con MS SQL Server
- sin conexión en cascada (guardar, actualizar ... no conecta en cascada a los objetos a los que se hace referencia)
NHibernate Pro:
- mucho rdbms apoyó ootb
- característica rica
- muy flexible para casi todos los casos de esquina
- fuente abierta
Estafa:
- no es tan fácil comenzar con
- no de MS
- hay muchas herramientas, pero tienes que buscar
Entre los 2 ORM
Yo elegiría LinqToSql si:
- db-schema == classes
- solo use MS SQL Server
- la tienda solo permite MS-Products
Yo elegiría Nhibernate si:
- modelo de objetos más rico
- legado db-schema
- DB distinto de MS SQL Server o soporte múltiple
- rendimiento crítico (creo que NH tiene más características para optimizar el rendimiento que LinqToSql)
NOTA: esta es mi opinión personal. Me ocupo principalmente de db heredados (locos) y trabajos de ETL complejos donde el modelo de objetos ayuda mucho con SQL.
Comience con NHibernate es una mala idea. Muestra un buen rendimiento solo con una configuración hábil. Intente usar EFv4 para proyectos grandes y L2S (tal vez productos de 3ª parte) para tamaño pequeño y mediano. Estos productos son más convenientes y flexibles que NHibernate y le permiten comenzar rápidamente.