December 1, 2010

NHibernate - 外部設定檔範例

前篇文章說明了NHibernate的設定檔設定方式,將設定細節寫在Web.config或App.config中,然而將NHibernate設定置於Web.config/App.config中可能會造成設定檔過於肥大,因為可能還有其它framework的設定檔,本篇文章將說明以外部設定檔的方式設定NHibernate,將細部設定自Web.config/App.config抽離。

 1.於專案中建立hibernate.cfg.xml檔案[註1]並將原本置放在*.config中hibernate-configuration區段移到hibernate.cfg.xml,並將其檔案屬性內的複製到輸出目錄設為永遠複製,因為NHibernate預設會讀取bin下的hibernate.cfg.xml,若不將hibernate.cfg.xml一同輸出至bin裡,NHibernate將讀取不到設定檔。


hibernate.cfg.xml 檔案內容如下
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
        <property name="dialect">NHibernate.Dialect.PostgreSQL82Dialect</property>
        <property name="connection.connection_string">Server=10.0.0.10;Port=5432;Database=dbname;User ID=username;Password=password;</property>
        <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
        <mapping assembly="NHibernateTest.Data"/>
    </session-factory>
</hibernate-configuration>
2.在呼叫任何NHibernate功能前於程式碼中加入以下片段
Configuration cfg = new Configuration();
cfg.Configure();
經由以上設定即可完成NHibernate設定。如果我們不想每次都要將hibernate.cfg.xml  輸出至bin呢?NHibernate也提供指定設定檔位置的方式讀取設定檔。假設hibernate.cfg.xml 置放在web ap根目錄下,我們可將程式碼修改為以下片段,即可讀取設定檔資訊[註2]
Configuration cfg = new Configuration();
cfg.Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hibernate.cfg.xml"));

備註
1.名稱需固定為hibernate.cfg.xml,否則run time會出現找不到設定檔的錯誤訊息
2.此時設定檔名稱可自訂

No comments: