NHibernate

NHibernate是一个面向.NET框架的对象关系映射解决方案。主要用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

NHibernate，顾名思义，如同NUnit，NAnt一样，是基于.Net的Hibernate实现。
.NET

例子 
這裡有程式碼片段，是要使用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();
        }
    }
}

NHibernate's configuration may affect when NHibernate executes SQL statements.