FluentNHibernate (Formulation du mapping sous forme de code .NET, donc impacté par un refactoring) et NHibernate.Mapping.Attributes (Attributs de décoration du modèle objet, équivalent des annotations Hibernate).
Le pattern repository permet l’utilisation de NHibernate sans « polluer » le domaine objet par l’utilisation d’une classe exposant les méthodes classiques CRUD (GetAll, GetById…), ainsi que les méthodes plus personnalisées liées au comportement de persistance voulu.
ActiveRecords est une implémentation du pattern éponyme de Martin Fowler. Son implémentation est portée par le projet Castle, connu également pour son conteneur IoC. ActiveRecords repose sur NHibernate, auquel il apporte quelques simplifications d'implémentation, telles que la suppression des fichiers de mapping (les remplaçant par une décoration des classes par des attributs).
Un active record est une classe du domaine métier comprenant les comportements de persistance en base de données. ActiveRecord simplifie la création de telles classes par l'utilisation d'attributs .NET permettant de documenter à même le code de la classe sa logique de persistance. Tout cela de façon déclarative. Une classe de base, fournie par ActiveRecord, ajoute aux classes du domaine objet les méthodes classiques de CRUD (Save, SaveOrUpdate, GetById), le développeur n’ayant plus qu’à implémenter les méthodes personnalisées via l’implémentation de NHibernate sous-jacente.
Entity Framework est la réponse de Microsoft à la popularité grandissante de NHibernate. Malgré des efforts significatifs dans le bon sens, plusieurs reproches lui ont été formulés par la communauté tels que :
Ces reproches ont été entendus par Microsoft, qui entend les résoudre pour la version 2 d’Entity Framework. Malgré tout, Entity Framework fournit une alternative à NHibernate fort bien outillée et intégrée à Visual Studio.
Le pattern d’utilisation d’EF suit celui de nhibernate, avec une classe responsable de persister et récupérer les objets depuis la base de données.
Force est de constater que le mapping objet/relationnel .NET n'a plus à rougir devant la concurrence Java comme aux débuts de NHibernate. Malgré tout, l'adoption sur les projets est lente et mériterait un coup de pouce. L'attitude de Microsoft, en s'intéressant au sujet, prenant en compte les retours de la communauté sur Entity Framework, et communiquant sur le sujet, va certainement dans le bon sens. Esperons qu'Entity Framework 2 saura mieux concurrencer NHibernate et ActiveRecord afin d'obtenir une saine emulation dans ce domaine, qui serait bénéfique à la communauté.