NHibernate Step by Step ( 三 )Configuration 和 Sessionfactory
好了,我們再從頭看一看 Configuration ,是否只能從 App.config 中取配置信息??
當然不是了,以下是 3 種最常見的配置:
<1> Configuration config = new Configuration();
這種配置方法將會到應用程序配置文件( App.Config,Web.Config )中查找 NHibernate 的配置信息, NHibernate 的配置節必須符合應用程序配置文件個格式,前面的教程我們已經看到過了。
<2> Configuration config = new Configuration().Configure();
這種配置方法將會在應用的相同目錄查找名為 ”hibernate.cfg.xml” 的標準 Hibernate 配置
文件,格式如下:




















<3>
Configuration config = new Configuration().Configure(configFileName);
這種配置方法將查找指定的 Hibernate 標準配置文件,可以是絕對路徑或者相對路徑。
另外我們還可以通過編碼的方式添加配置信息:






這種方式不夠配置文件來的靈活,所以我們一般不建議使用。
在取得 config 后,我們還需要進行映射文件添加,同樣,我們常用以下 3 種不同的方法:
<1> config.AddXmlFile(“Person.hbm.xml”);
<2> config.AddClass(typeof(Test.Model.Person));
<3> config.AddAssembly(“Test.Model”);
以上方法都可以用“階梯式“的編碼風格,如下:





當然,為了方便起見,我們一般把所有的影射類文件及 xml 文件統一放在一個程序集中,然后使用 config.AddAssembly(assemblyName) 的方式,讓 NHibernate 自動去查找指定程序集中所有的映射文件和映射類。
你有沒有發現在我們使用標準的 hibernate 配置文件時,有如下一個元素:
<!-- mapping files -->
<mapping assembly="Test.Model" />
對了,你想的不錯,我們可以避免在代碼中捆綁映射程序集,而在配置文件中指定,這種方式可以說是最靈活的了。
提示:在 Web 程序中,最好將配置文件改為 config 的后綴,否則在沒有添加對 xml 的 asp.net 映射的情況下,你的配置文件就有可能被下載喲!!
我們再來看看 Sessionfactory :

在由 Configuration 構造完 SessionFactory 后, SessionFactory 便保留了配置信息而不再需要 Configuration ,之后 Configurationd 的任何變化都不會影響到已經創建好的 SessionFactory ,如果你的配置信息發生變化,那么,毋庸置疑,你必須重新由 Configuration 構造出一個新的 SessionFactory 來。
注意: SessionFactory 是一個 Heavy Object ,它不但保存了配置信息,而且還有所有的映射關系(你可以調用 GetAllCollectionMetadata 方法試驗一下),以及需要進行總體維護的緩存等等信息,所以,我們不應該重復地創建 SessionFactory 對象,而應該充分共用已經創建出來的 SessionFactory 對象,同時, SessionFactory 也是一個線程安全的對象,所以在多線程的場景下也完全可以共用。在我們實際開發中,我們可以在初始化的部分構造一個 SessionFactory 即可,比如,在一個公共靜態類中初始化一個 SessionFactory 的 readonly 常量等等。
另外需要注意的是,如果你要對多個數據庫進行操作,那么你可以配置針對每個數據庫而創建對應的 SessionFactory ——大部分情況下,一個數據庫對應一個 SessionFactory 足夠使用。
好了,這一篇就講這么多,我們下次再接著練習。
任何建議或者批評,請
e
:
abluedog@163.com
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
