對初學者來說,學習NHibernate第一個障礙便是他的配置。確實,相對於 LINQ TO SQL或者是Entity FrameWork來說,他的配置太復雜了,各個實體類對 應的映射文件、以及NHibernate自身的配置等等,對象剛學習NHibernate的新手 來說,確實是擺在他們面前的一道坎。那麼NHibernate的配置到底應該注意哪些 問題?又該如何去進行配置呢?俗話說“給人魚不如授人以漁”。下面我就說說 自己在使用NHibernate配置的過程,以及在配置中出現問題後,怎樣去解決這些 問題。
先介紹我使用的環境以及Nhibernate的版本。
開發環境:VS2008 SP1、 NHibernate-2.1.2.GA-bin.
1、NHibernate如何配置
Nhibernate的配置,當然可以手寫進行配置的。但是在編寫映射文件的時候 有沒有智能提示呢?答案是有的!那怎樣才能在VS中讓我們在編寫、修改映射文 件的時候出現智能提示呢。?在我學習NHibernate的博客 (http://www.cnblogs.com/lyj/archive/2008/10/14/1310913.html)中,永哥 (我的名字也有個永字,^_^)說“在下載的NHibernate裡找到 configuration.xsd和nhibernate- mapping.xsd兩個文件(這個文件我們可以在 src\NHibernate.Config.Templates文件夾下找到)並復制到X: \Program Files\Microsoft Visual Studio 9.0\Xml\Schemas目錄即可"。我剛開始以為是 NHibernate小組在開發Nhibernate後將源代碼發布了(因為有SRC,我想應該是源 代碼的文件夾吧!),裡面有這兩個文件。後來我試著去找NHibernate的源碼, 結果找到的都是別人用NHibernate開發取來的例子的源碼。因為我就沒有找到, 最後不得不放棄。我把下載到的NHibernate-2.1.2.GA-bin解壓後,在 Required_Bins文件夾下 nhibernate-mapping.xsd、nhibernate- configuration.xsd復制到C:\Program Files\Microsoft Visual Studio 9.0 \Xml\Schemas下,試編寫映射文件,結果發現有了智能提示了。【注:我這裡並 不是他永哥說錯了,因為他發表他那邊博文的時候是08年,現在都2010了, Nhibernate的版本是改了又改,文件名肯定也會發生變化。我用是的版本比他的 新。我學習Nhibernate也是從永哥的博客開始的。另外謝謝永哥這麼好的博文! 】
2、NHibernate在我們項目中需要的程序集動態庫如下:NHibernate.dll、 NHibernate.ByteCode.Castle.dll、Antlr3.Runtime.dll、 Iesi.Collections.dll、 log4net.dll。另外:如果你的NHibernate的代理工廠 配置為Castle【即對property name='proxyfactory.factory_class'的配置】, 則還需要Castle.Core.dll、 Castle.DynamicProxy2.dll。當然若你配置的代理 工廠類為LinFu,則需要他所對應的程序集文件。在 NHibernate.dll2.0.1.4000 不設置它也行。但是2.1.2下必須設置。說明:設置它的作用就是我們需要在程 序中用什麼樣的方式實現延遲加載
3、映射文件的設置:所有實體類對應的映射的XML文件應該設置為“嵌入資 源”。否則系統程序會異常。如:
另外,對各個實體類的映射文件中的unsave-value的設置,具體請參見我的 CSDN的博客 (http://blog.csdn.net/tyb1222/archive/2010/09/22/5900923.aspx)我這裡 就不做說明了。
4、NHibernate的配置文件的設置:在我們下載的NHibernate-2.1.2.GA-bin 解壓後,會有一個 Configuration_Templates文件夾。他裡面存放的是 Nhibernate所支持的各種數據庫的配置。選擇你用的數據庫類別,將相應的 xml 文件拷貝到配置文件中。注意:在Configuration_Templates文件夾下的 SQLSERVER數據庫的配置文件中,需添加對應實體類的程序集的配置【如: mapping assembly="Model"】,否則會報如上3中所出現的異常。我覺得默認的 配置模板中就應該加上對實體類所在程序集的配置,我們改相應的程序集名稱就 行了,但是在2.1.2.GA中卻並沒有這樣做。
5、注意你的映射文件中class 裡屬性的配置,若配置不正確變回提示如下異 常:
通常這樣的異常是由於系統找不到由映射文件制定的程序集而產生
6、NHibernate-2.1.2的配置與以前版本不一樣的地方:必須設置延遲加載的 方式、Nhibernate的配置不必設置為"始終復制",默認即可、所需的程序集文件 比以前多【因為延遲加載現在必須設置,所以涉及的動態庫文件也是必不可少的 】
總結:NHibernate-2.1.2配置需注意將映射文件設置為嵌入的資源、對從配 置模板中拷貝過來的必須添加對實體類程序集配置以及我們需要的數據庫連接、 如果我們是實體類的映射文件中不申明不使用延遲加載則對應的實體類所有的屬 性方法必須為virtual、NHibernate各個版本下所需要的其他庫文件必須與之配 套使用,應注意版本。