NHibernate - NHibernate

NHibernate
NHibernate-logo.svg
Lanzamiento estable
5.3.8 / 5 de abril de 2021 ; hace 3 meses ( 05/04/2021 )
Repositorio Edita esto en Wikidata
Escrito en C#
Sistema operativo Multiplataforma
Plataforma .NET 4.6.1, .NET Standard 2.0, .NET Core 2.0 y Mono
Tipo Mapeo relacional de objetos
Licencia Licencia pública general reducida GNU 2.1
Sitio web http://nhibernate.info

NHibernate es una solución de mapeo relacional de objetos (ORM) para la plataforma Microsoft .NET . Proporciona un marco para mapear un modelo de dominio orientado a objetos a una base de datos relacional tradicional . Su propósito es aliviar al desarrollador de una parte significativa de las tareas de programación relacionadas con la persistencia de datos relacionales. NHibernate es un software gratuito y de código abierto que se distribuye bajo la GNU Lesser General Public License . NHibernate es un puerto de Hibernate .

Resumen de funciones

La característica principal de NHibernate es el mapeo de clases .NET a tablas de bases de datos (y de tipos de datos CLR a tipos de datos SQL ). NHibernate también proporciona funciones de consulta y recuperación de datos. NHibernate genera los comandos SQL y libera al desarrollador del manejo manual de conjuntos de datos y conversión de objetos, manteniendo la aplicación portátil a la mayoría de las bases de datos SQL, con portabilidad de la base de datos entregada con muy poca sobrecarga de rendimiento.

NHibernate proporciona persistencia transparente para objetos CLR antiguos simples (POCO). El único requisito estricto para una clase persistente es un constructor sin argumentos, que no tiene que ser público. (El comportamiento adecuado en algunas aplicaciones también requiere especial atención a los métodos Equals () y GetHashCode ().)

Historia

NHibernate fue iniciado por Tom Barrett, y luego recogido por Mike Doerfler y Peter Smulovics. A finales de 2005, JBoss , Inc. (ahora parte de Red Hat ) contrató a Sergey Koshcheyev, el entonces desarrollador principal de NHibernate, para trabajar a tiempo completo en sus futuras versiones. A finales de 2006 JBoss dejó de dar soporte a este proyecto; ahora está completamente desarrollado y dirigido por la comunidad.

La versión 1.0 reflejó el conjunto de características de Hibernate 2.1, así como una serie de características de Hibernate 3.

NHibernate 1.2.1, lanzado en noviembre de 2007, introdujo muchas más características de Hibernate 3 y soporte para .NET 2.0, procedimientos almacenados , genéricos y tipos que aceptan valores NULL.

NHibernate 2.0

NHibernate 2.0 fue lanzado el 23 de agosto de 2008. Es comparable a Hibernate 3.2 en términos de características. Con el lanzamiento de la versión 2.0, NHibernate eliminó el soporte para .NET 1.1.

NHibernate 2.1 fue lanzado el 17 de julio de 2009.

NHibernate 3.0

NHibernate 3.0 fue lanzado el 4 de diciembre de 2010 y es la primera versión que usa .NET 3.5, con características como:

  • Soporte LINQ integrado
  • API similar a criterios fuertemente tipada llamada QueryOver
  • Nuevo analizador basado en AST para motor HQL
  • Soporte para columnas de carga diferida.

NHibernate 3.2

NHibernate 3.2 fue lanzado en abril de 2011. Algunas de las nuevas características fueron:

  • Mapeo por código: configuración fluida, los archivos .hbm.xml ya no son necesarios;
  • Subselección: capacidad para mapear vistas SQL como entidades;
  • Paginación HQL: TAKE y SKIP en HQL;
  • Proveedor de código de bytes integrado: una DLL menos para implementar.

NHibernate 4.0

NHibernate 4.0 se lanzó el 17 de agosto de 2014. Esta versión requiere .NET Framework 4.0 o posterior.

NHibernate 5.0

NHibernate 5.0 se lanzó el 10 de octubre de 2017. Proporciona soporte para programación asincrónica. Esta versión requiere .NET Framework 4.6.1 o posterior.

NHibernate 5.1

NHibernate 5.1 se lanzó el 17 de marzo de 2018. Es compatible con .NET Standard 2.0 y .NET Core 2.0.

NHibernate 5.2

NHibernate 5.2 se lanzó el 4 de diciembre de 2018.

NHibernate 5.3

NHibernate 5.3 se lanzó el 19 de julio de 2020.

Contribuciones

Como software de código abierto , NHibernate ha recibido muchas contribuciones de sus usuarios. La implementación de LINQ ha permitido el uso de Language Integrated Query con NHibernate.

Perfilador NHibernate

NHibernate Profiler es una herramienta de mapeo relacional de objetos (ORM) que sirve como depurador visual en tiempo real para NHibernate. Identifica consultas de datos SQL ineficientes para eliminar el trabajo innecesario de la base de datos para mejorar el rendimiento general de la aplicación. NHibernate Profiler también alerta a los usuarios sobre consultas de datos que cuestan demasiado en el tiempo y los dirige a la línea exacta en el código C # .

Muestra

Aquí un fragmento de código para agregar un objeto a la base de datos y muestra cómo recuperar, modificar y actualizar un objeto en la base de datos usando NHibernate.

//Add a Customer to the datastore

//'sessionFactory' is a thread-safe object built once per application lifetime (can take seconds to build)
//based on configuration files which control how database tables are mapped to C# objects
//(e.g. which property maps to which column in a database table)
//
//'session' is not thread safe and fast to obtain and can be thought of as a connection to the database
using (var session = sessionFactory.OpenSession()) 
{
    //transaction represents a db transaction
    using (ITransaction transaction = session.BeginTransaction()) 
    {
        //The line below adds the customer to NHibernate's list of objects to insert to the database
        //but it doesn't execute SQL insert command at this stage*.
        //*if the Id field is generated by the database (e.g. an auto-incremented number) 
        //then NHibernate will execute SQL INSERT when .Save is called  
        session.Save(new Customer { Id = Guid.NewGuid(), FirstName = "Boss", Age = 50 });

        //The call below will execute the SQL INSERT and commit the transaction
        transaction.Commit();
    }
}

//Retrieve the Customer from the database, modify the record and update the database
using (var session = sessionFactory.OpenSession())
{
    using (ITransaction transaction = session.BeginTransaction()) 
    {
        // session's Query returns IQueryable<Customer>.
        // Only when .FirstOrDefault is called will NHibernate execute the SQL query  
        Customer customer = session.Query<Customer>().Where(c => c.Token == token).FirstOrDefault();
    
        // Now the customer is 'part of' the 'session' object and NHibernate keeps track of changes
        // made to it 
        if (customer != null) 
        {
            // Changing a property of an object does NOT cause SQL to be executed
            customer.TokenVerified = true;
    
            // Committing the transaction results in an SQL UPDATE statement
            // NHibernate kept track of the fact that 'customer' has been changed since loading 
            transaction.Commit();
        }
    }
}

La configuración de NHibernate puede afectar cuando NHibernate ejecuta sentencias SQL.

Ver también

Referencias

Bibliografía

enlaces externos