visual tutorial studio net framework example .net nhibernate orm

.net - tutorial - Alternativas ligeras a NHibernate



nhibernate vs entity framework (8)

LINQ to SQL podría ser una buena alternativa a los sistemas ORM "heave" si lo usará correctamente.

NHibernate no es realmente una buena opción para nuestro entorno debido a todas las dependencias. (Castillo, log4net, etc.)

¿Hay una buena alternativa ligera?

La compatibilidad con bases de datos simples basadas en archivos como Access / SQLite / VistaDB es esencial.

Idealmente, algo contenido en un solo ensamblaje que solo haga referencia a los ensamblados .NET. Si solo requiere .NET framework 2.0 o 3.0 es una bonificación.


Para un ORM liviano que funciona bien y solo requiere un ensamblaje único, ¿por qué no probar Lightspeed de Mindscape? No es de código abierto, sin embargo la fuente está disponible y tiene un precio razonable; el riesgo con la mayoría de los ORM que no están bien adoptados es, por supuesto, calidad y nivel de soporte, y hay muy pocos otros ORM de código abierto que vale la pena. Espacio neto en este momento.

Debido a su aversión por las dependencias de NHibernate, parece que no necesita un marco de trabajo de registro ni ninguna de las facetas del proyecto del castillo, como IoC, Monorail, etc. ¿Ha considerado tal vez simplemente cumplir con los mínimos requisitos de NHibernate (log4net y el Creo que las colecciones Iesi, y el proxy dinámico del proyecto del castillo?) Y ejecutar ILMerge sobre ellos para consolidarlos en un solo ensamblado - podría tomar un poco de toqueteo, pero no es demasiado difícil - o alternativamente, podrías simplemente extraer el código fuente para cada uno de estos proyectos en una compilación personalizada de NHibernate que mantenga para su organización que recorta las características no requeridas por su proyecto / organización; no es tan difícil / incómodo como parece y he hecho algo en este sentido para un proyecto donde queríamos beneficiarnos de un ORM, pero necesitábamos reducir el tamaño de los archivos distribuidos / instalador.

Además, ¿es posible que puedas explicar lo que sientes que es demasiado "pesado" sobre una solución basada en Nhibernate ... en mi experiencia es un marco ORM razonablemente ligero en comparación con algunos.



algunas de las alternativas:
- ActiveRecord - usa nhibernate.dll en segundo plano, pero la configuración se realiza a través de atributos. Es como la versión lite de nhibernate
- Subsonico
- CoolStorage.NET - Lo usé mucho con pequeños proyectos. Funciona bien con el número de dbs


Agregando a esta lista, también puede echar un vistazo a Dapper (escrito para y utilizado por ).


Aquí hay una gran lista de alternativas, las que recomendaría:

  • Coolstorage
  • SOODA
  • ODX
  • Lightspeed (gratis para 8 objetos o menos)

Esos 4 son los más ligeros. Subsonic, ActiveRecord y otros están destinados a sistemas grandes. Funcionan bien en sistemas más pequeños pero (al menos para ActiveRecord) vienen con una gran lista de dependencias y exageración para un sistema pequeño. Me iría con Lightspeed y diría que cualquier cosa en 8 objetos es un sistema pequeño, y simplemente usar NHibernate porque es ampliamente adoptado es bueno para escalar pero a corto plazo no tiene sentido, y tener una capa entre el ORM y tus consumidores puede funcionar alrededor de todos modos.


Si no necesita un ORM totalmente funcional y solo necesita una capa de datos independiente de base de datos rápida sobre ADO.NET, pruebe la biblioteca NI.Data de código abierto (V2) . Es muy liviano (solo un ensamblaje pequeño, sin otras dependencias), proporciona toda la infraestructura de capa de datos estándar:

  • consulta de abstracción y analizador para su representación de cadena llamada ''relex'' (se ve como: "libros (clasificación = 5) [título, identificación]" - muy buena alternativa a Linq-to-SQL y las expresiones se pueden componer sobre la marcha)
  • concepto ''view'' para encapsular consultas SQL dependientes de sintaxis DB complejas
  • desencadenadores de datos
  • permisos de la capa de datos para seleccionar / actualizar / eliminar consultas
  • desde la caja es compatible con los proveedores de MS SQL, SQLite, MySQL, Odbc / OleDb (MS Access). El soporte para otras bases de datos SQL podría agregarse fácilmente.

Su componente principal (DALC) se inicializó solo con una línea de código:

var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);

eso es todo. Si necesita soporte de tiempo de ejecución de .NET 2.0, puede intentar compilar la última versión de V2 bajo el tiempo de ejecución 2.0 o usar la versión anterior de legado (NI.Data.Dalc, V1).


En general, para que el back-end de su base de datos funcione con .net, necesita un proveedor de ADO.Net para ello.

Para MS Access (Jet), el proveedor se envía con .net. Para SQLite, hay un proveedor autónomo ADO.Net.

En cuanto a la lib de capa de acceso a datos, si quieres algo de abstracción sobre ADO.Net:

Todos aquellos funcionan bien comenzando con el framework 2.0 y posteriores.

Básicamente, usted elige (y hay muchas opciones)