NHibernate

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋
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.