NHibernate
NHibernate is an object–relational mapping (ORM) solution for the Microsoft .NET platform. It provides a framework for mapping an object-oriented domain model to a traditional relational database. Its purpose is to relieve the developer from a significant portion of relational data persistence-related programming tasks. NHibernate is free and open-source software that is distributed under the GNU Lesser General Public License. NHibernate is a port of Hibernate. Feature summary. NHibernate's primary feature is mapping from .NET classes to database tables (and from CLR data types to SQL data types). NHibernate also provides data query and  retrieval facilities. NHibernate generates the SQL commands and relieves the developer from manual data set handling and object conversion, keeping the application portable to most SQL databases, with database portability delivered at very little performance overhead. NHibernate provides transparent persistence for Plain Old CLR Objects (POCOs). The only strict requirement for a persistent class is a no-argument constructor, which does not have to be public. (Proper behavior in some applications also requires special attention to the Equals() and GetHashCode() methods.) History. NHibernate was started by Tom Barrett, and later picked up by Mike Doerfler and Peter Smulovics. At the  end of 2005, JBoss, Inc. (now part of Red Hat) hired Sergey Koshcheyev, the then lead developer of NHibernate, to work full-time on its future versions. At the end of 2006 JBoss stopped the support to this project; it is now entirely developed and led by the community. Version 1.0 mirrored the feature set of Hibernate 2.1, as well as a number of features from Hibernate 3. NHibernate 1.2.1, released in November 2007, introduced many more features from Hibernate 3 and support for .NET 2.0, stored procedures, generics, and nullable types. NHibernate 2.0. NHibernate 2.0 was released on August  23, 2008. It is comparable to Hibernate 3.2 in terms of features. With the version 2.0 release, NHibernate dropped support for .NET 1.1. NHibernate 2.1 was released July 17, 2009. NHibernate 3.0. NHibernate 3.0 was released on December 4, 2010 and is the first version to use .NET 3.5, with features such as: NHibernate 3.2. NHibernate 3.2 was released in April, 2011. Some of the new features were: NHibernate 4.0. NHibernate 4.0 was released on August 17, 2014. This version requires .NET Framework 4.0 or later. NHibernate 5.0. NHibernate 5.0 was released on October 10, 2017. It provides support for  asynchronous programming. This version requires .NET Framework 4.6.1 or later. NHibernate 5.1. NHibernate 5.1 was released on March 17, 2018. It supports .NET Standard 2.0 and .NET Core 2.0. NHibernate 5.2. NHibernate 5.2 was released on December 4, 2018. NHibernate 5.3. NHibernate 5.3 was released on July 19, 2020. Contributions. As open source software, NHibernate has received many contributions from its users. Implementation of LINQ has allowed Language Integrated Query use with NHibernate. NHibernate Profiler. The NHibernate Profiler is an Object–Relational Mapping tool (ORM) that serves as a real-time visual debugger for NHibernate. It identifies inefficient SQL data  queries to eliminate unnecessary work by the database to boost overall performance of the application. The NHibernate Profiler also alerts users to data queries that cost too much in time and directs them to the exact line in the C# code. Sample. Here a code snippet to add an object to the database and shows how to retrieve, modify and update an object in the database using 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()) //Retrieve the Customer from the database, modify the record and update the database using (var session = sessionFactory.OpenSession()) NHibernate's configuration may affect when NHibernate executes SQL statements.