我的NHibernate之路(1)---基本配置篇
對初學者來說,學習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.rzrgm.cn/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各個版本下所需要的其他庫文件必須與之配套使用,應注意版本。
浙公網安備 33010602011771號