NHibernate - Présentation

Dans ce chapitre, nous discuterons de ce qu'est NHibernate, de toutes les plates-formes sur lesquelles il peut être implémenté, de ses avantages et d'autres aspects qui y sont liés.

Qu'est-ce que NHibernate?

NHibernate est un mappeur objet-relationnel mature et open source pour le framework .NET. Il est activement développé, complet et utilisé dans des milliers de projets réussis. Il est construit au-dessus deADO.NET et la version actuelle est NHibernate 4.0.4.

  • NHibernate est un mappeur relationnel objet .NET open-source et est distribué sous le GNU Lesser General Public License.

  • Il est basé sur Hibernate qui est un mappeur relationnel objet Java populaire et il a une base de code très mature et active.

  • Il fournit un cadre pour mapper un modèle de domaine orienté objet vers une base de données relationnelle traditionnelle.

  • NHibernate a été lancé par Tom Barrett et ce projet existe depuis février 2003, qui était leur premier engagement.

  • C'est un gros projet et offre beaucoup de fonctionnalités.

  • Il y a un NuGet package disponible, ce qui rend très facile l'ajout à un projet.

Pourquoi NHibernate?

Maintenant, la question est de savoir pourquoi avons-nous besoin object-relational mappers? C'est parce qu'il y a une déconnexion entre le monde des objets et le monde relationnel.

  • Dans le monde des objets, tout est basé sur objects; nous appelons les objets les choses qui contiennent nos données.

  • Le monde relationnel est entièrement basé sur des ensembles et nous avons affaire à des tables et des lignes qui sont différentes du monde objet.

  • Dans le monde des objets, nous avons unidirectional associations. Si un client a un pointeur vers une commande, cela ne signifie pas nécessairement qu'une commande a un pointeur vers un client, cela peut ou non.

  • Dans le monde relationnel, toutes les associations sont bidirectional et cela peut être fait par une clé étrangère.

  • Toutes les associations sont intrinsèquement bidirectionnelles, donc lorsque nous traitons de mappage objet-relationnel, nous devons également gérer cette déconnexion.

  • Dans le monde des objets, nous travaillons avec des pointeurs unidirectionnels, alors que dans le monde relationnel, nous avons des clés étrangères qui sont intrinsèquement bidirectionnelles.

  • Le monde des objets a cette notion d'héritage, où un véhicule peut avoir un certain nombre de sous-classes différentes, donc une voiture est un type de véhicule, un bateau est un type de véhicule et une voiture de sport est un type de voiture, ces types de relations d'héritage.

  • Le monde relationnel n'a pas cette notion d'héritage.

Cartographie

Alors, comment cartographier tout cela disjoint relationships?Ce concept de mappage vient du mappeur objet-relationnel. Il y a principalement trois choses à comprendre comme indiqué dans le diagramme suivant.

  • Dans votre application, vous aurez besoin de définitions de classe, qui sont généralement du code C # et son code .NET qui représente nos classes, telles que la classe Employee, la classe Customer, la classe Order, etc.

  • En bas, vous pouvez voir un schéma de base de données, qui est notre Data Definition Language dans une base de données relationnelle qui spécifie à quoi ressemble une table client, à quoi ressemble une table d'employé.

  • Entre ceux-ci, nous avons les métadonnées de mappage qui indiquent au mappeur relationnel objet comment traduire du monde objet en C # au monde de la base de données en termes de lignes et de colonnes et de relations de clé étrangère.

  • Ces métadonnées de mappage peuvent être représentées de différentes manières et nous examinerons un certain nombre de ces différentes manières les plus courantes dans l'application NHibernate.

  • Il est représenté par HBM (Hibernate Mapping) fichiers, qui sont des fichiers XML.

Base de données prise en charge

NHibernate prend en charge une grande variété de bases de données différentes. Toute base de données relationnelle existante est accessible à NHibernate.

  • Le serveur SQL est la base de données principale prise en charge, c'est ce que la plupart des développeurs utilisent pendant le développement, c'est probablement la plus courante.

  • Ça aussi works very well with Oracle.

  • Il prend également en charge DB2, Firebird, MySQL, PostgreSQL, SQL Lite

  • Cela a aussi ODBC and OLEDB drivers.