Hibernation - NHibernate

Hibernation
Hibernate-logo.svg
Version stable
5.3.8 / 5 avril 2021 ; il y a 3 mois ( 2021-04-05 )
Dépôt Modifiez ceci sur Wikidata
Écrit en C#
Système opérateur Multiplateforme
Plate-forme .NET 4.6.1, .NET Standard 2.0, .NET Core 2.0 et Mono
Taper Mappage objet-relationnel
Licence Licence publique générale limitée GNU 2.1
Site Internet http://nhibernate.info

NHibernate est une solution de mappage objet-relationnel (ORM) pour la plate-forme Microsoft .NET . Il fournit un cadre pour mapper un modèle de domaine orienté objet vers une base de données relationnelle traditionnelle . Son but est de soulager le développeur d'une partie importante des tâches de programmation liées à la persistance des données relationnelles . NHibernate est un logiciel libre et open source qui est distribué sous la licence publique générale limitée GNU . NHibernate est un portage d' Hibernate .

Résumé des fonctionnalités

La principale caractéristique de NHibernate est le mappage des classes .NET aux tables de base de données (et des types de données CLR aux types de données SQL ). NHibernate fournit également des fonctionnalités de requête et de récupération de données. NHibernate génère les commandes SQL et soulage le développeur de la gestion manuelle des ensembles de données et de la conversion d'objets, en gardant l'application portable sur la plupart des bases de données SQL, avec une portabilité de la base de données fournie avec très peu de surcharge de performances.

NHibernate fournit une persistance transparente pour les objets POCO ( Plain Old CLR ). La seule exigence stricte pour une classe persistante est un constructeur sans argument, qui n'a pas besoin d'être public. (Un comportement correct dans certaines applications nécessite également une attention particulière aux méthodes Equals() et GetHashCode().)

Histoire

NHibernate a été lancé par Tom Barrett, puis repris par Mike Doerfler et Peter Smulovics. Fin 2005, JBoss , Inc. (qui fait maintenant partie de Red Hat ) a embauché Sergey Koshcheyev, alors développeur principal de NHibernate, pour travailler à temps plein sur ses futures versions. Fin 2006, JBoss a arrêté le support de ce projet ; il est désormais entièrement développé et animé par la communauté.

La version 1.0 reflétait l'ensemble des fonctionnalités d'Hibernate 2.1, ainsi qu'un certain nombre de fonctionnalités d'Hibernate 3.

NHibernate 1.2.1, publié en novembre 2007, a introduit de nombreuses autres fonctionnalités d'Hibernate 3 et la prise en charge de .NET 2.0, des procédures stockées , des génériques et des types nullables.

Hibernate 2.0

NHibernate 2.0 est sorti le 23 août 2008. Il est comparable à Hibernate 3.2 en termes de fonctionnalités. Avec la version 2.0, NHibernate a abandonné la prise en charge de .NET 1.1.

NHibernate 2.1 est sorti le 17 juillet 2009.

Hibernate 3.0

NHibernate 3.0 est sorti le 4 décembre 2010 et est la première version à utiliser .NET 3.5, avec des fonctionnalités telles que :

  • Prise en charge intégrée de LINQ
  • API de type critère fortement typée appelée QueryOver
  • Nouvel analyseur basé sur AST pour le moteur HQL
  • Prise en charge des colonnes de chargement paresseux.

Hibernate 3.2

NHibernate 3.2 est sorti en avril 2011. Certaines des nouvelles fonctionnalités étaient :

  • Mappage par code : configuration fluide, les fichiers .hbm.xml ne sont plus nécessaires ;
  • Sous-sélection : possibilité de mapper les vues SQL en tant qu'entités ;
  • Pagination HQL : TAKE et SKIP sur HQL ;
  • Fournisseur de bytecode intégré : une DLL de moins à déployer.

Hibernate 4.0

NHibernate 4.0 a été publié le 17 août 2014. Cette version nécessite .NET Framework 4.0 ou une version ultérieure.

Hibernate 5.0

Hibernate 5.0 a été publié le 10 octobre 2017. Il prend en charge la programmation asynchrone. Cette version nécessite .NET Framework 4.6.1 ou une version ultérieure.

Hibernate 5.1

NHibernate 5.1 a été publié le 17 mars 2018. Il prend en charge .NET Standard 2.0 et .NET Core 2.0.

Hibernate 5.2

NHibernate 5.2 est sorti le 4 décembre 2018.

Hibernate 5.3

NHibernate 5.3 est sorti le 19 juillet 2020.

Contributions

En tant que logiciel open source , NHibernate a reçu de nombreuses contributions de ses utilisateurs. L'implémentation de LINQ a permis l'utilisation de Language Integrated Query avec NHibernate.

Profileur Hibernate

Le profileur NHibernate est un outil de mappage objet-relationnel (ORM) qui sert de débogueur visuel en temps réel pour NHibernate. Il identifie les requêtes de données SQL inefficaces pour éliminer le travail inutile de la base de données afin d'améliorer les performances globales de l'application. Le profileur NHibernate alerte également les utilisateurs des requêtes de données qui coûtent trop cher en temps et les dirige vers la ligne exacte dans le code C# .

Goûter

Voici un extrait de code pour ajouter un objet à la base de données et montre comment récupérer, modifier et mettre à jour un objet dans la base de données à l'aide de 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 configuration de NHibernate peut affecter le moment où NHibernate exécute les instructions SQL.

Voir également

Les références

Bibliographie

Liens externes