NHibernate 基本配置 (第一篇)


  使用NHibernate最重要的一步就是配置,如果連NHibernate都還沒有跑的起來,談何學習。今天就來詳解一下NHibernate的配置。

一、NHibernate基本配置

  NHibernate配置要注意的有:

  1、NHibernate需要一個自定義的配置節點,一般放在Web.config里或App.config里面,當然你可以自己定義實際位置。

  示例如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name ="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate"/>  (1)
  </configSections>
  <hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="Dao">
      <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>           (2)
      <property name="connection.connection_string">          
        Data Source=KISSDODOG-PC;Initial Catalog=Test;uid=sa;pwd=123;                        (3)                        
      </property>
      <property name ="dialect">NHibernate.Dialect.MsSql2008Dialect</property>                   (4)
      <mapping assembly ="Model"/>                                             (5)
    </session-factory>    
  </hibernate-configuration>
</configuration>

  (1)、聲明自定義配置節點

    name:自定義配置節點名稱。

    type:處理程序位置。

  (2)、聲明是哪一個數據庫驅動程序。

  (3)、數據庫連接。

  (4)、所使用的SQL方言,通過這個方言,NHibernate才知道要將你寫的查詢語句,翻譯成何種數據庫的SQL語句。

  (5)、設定映射文件默認所在的程序集。‘

  NHibernate的配置節點並不止5個,想知道更詳細的配置節點說明:http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919873.html

  另外,這一個配置節點文件,並不一定要放在Web.config或App.config里,例如你可以定義一個hibernate.cfg.xml文件,然后創建ISessionFactory時指定位置:

ISessionFactory sessionFactory = new Configuration().Configure(AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "hibernate.cfg.xml").BuildSessionFactory();

  這里要小心"new Configuration().Configure()",如果沒有Configure("xxx.cfg.xml")就是從配置文件加載,有就是從自定義文件(如:xxx.cfg.xml)加載。

  注意,此hibernate.cfg.xml文件名可以隨意起,但是要設置為始終復制。否則將報告如下錯誤:

  An exception occurred during configuration of persistence layer.

   2、NHibernate的映射文件一定要設為嵌入的資源。

  

  3、NHibernate的實體類所有的屬性都要加上virtual-虛屬性,具體將在持久化類的文章中說明,下面給個例子:

    public class PersonModel
    {
        public virtual int Id { get; set; }

        public virtual string Name { get; set; }
    }

   NHibernate作為一個ORM框架,它需要知道如何將數據庫的表與對應的實體類相關聯,NHibernate通過映射文件的方式來獲得這方面的信息。

二、獲取映射文件相關配置

  NHibernate中的映射文件以hbm.xml為后綴結束,NHibernate獲取映射文件的方法有3種方法。

  1、從config程序配置文件獲取映射文件位置

  NHibernate運行在.Net程序上,需要自己提供一個自定義配置節點,這個配置節點里面包含了數據庫連接,什么數據庫等等信息。其中就包括了配置文件所在位置的信息。

  NHibernate會直接從Web.config或App.config文件上的配置節點上讀取這個節點,然后從節點指定的程序集去查找映射文件。

  <mapping assembly ="Nx.Repository"/>  

   以上這個配置節點所保存的就是映射文件默認所在的程序集。這樣當程序啟動時,NHibernate就會自動去Nx.Repository尋找*.hbm.xml映射文件。

  如果NHibernate找不到映射文件,則可能會報如下錯誤:

“/”應用程序中的服務器錯誤。


No persister for: xxx.xxx

 

   2、編程的方式,寫在代碼里

  (1)、AddFile 指定映射文件

  ISessionFactory sessionFactory = new Configuration().Configure().AddFile(@"C:\Users\Administrator\Desktop\NHibernate學習\Model\Mapping\Person.hbm.xml").BuildSessionFactory();

  注意,當你不寫全路徑的時候,也就是只寫個文件名,那么NHibernate就會從配置文件讀取程序集,到配置文件中指定的程序集去加載此映射文件。如果配置文件並不指定程序集,那么就從當前程序集中查找指定名的映射文件。但這種方式,不必設置嵌入的資源,但要記得設置為始終復制。

  Configuration cfg = new Configuration().AddFile("Mapping/Person.hbm.xml");
  ISessionFactory sessionFactory = cfg.BuildSessionFactory();

  這種方法只是指定一個文件,但是可以鏈式指定多個如:AddFile("f1").AddFile("f2")。

  (2)、AddAssembly

  還有另外一種方法,在創建Configuration時指定程序集。

  Configuration cfg = new Configuration().AddAssembly("Model");       //Model為映射文件所在程序集名稱
  ISessionFactory sessionFactory = cfg.BuildSessionFactory();

  這種方法,即使.config配置文件里<mapping assembly=""/>節點為空也沒關系,NHibernate會自動到指定的程序集里查找所有以.hbm.xml結尾的文件。

  (3)、AddClass

  這種方式,可以消除程序對文件路徑字符串的硬編碼。

  Configuration cfg = new Configuration().AddClass(typeof(Model.Person));
  ISessionFactory sessionFactory = cfg.BuildSessionFactory();

  但是缺點也非常明顯,類名必須與映射文件的名稱相同。不然,編譯就無法通過,因為Person類都找不到。另外,映射文件Person.hbm.xml必須放在根目錄。

  NHibernate會自動到程序中去查找名為Person.hbm.xml文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM