NHibernate

维基百科,自由的百科全书
跳转到导航 跳转到搜索
NHibernate
File:NHibernate-logo.svg
当前版本4.0.3(2015年1月20日 (2015-01-20)
源代码库
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
编程语言C Sharp
引擎
    Module:EditAtWikidata第29行Lua错误:attempt to index field 'wikibase' (a nil value)
    操作系统跨平台
    许可协议GNU宽通用公共许可证
    网站http://nhibernate.info

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

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


    例子[编辑]

    这里有程式码片段,是要使用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.