我的NHibernate之路(1)---基本配置篇
對(duì)初學(xué)者來(lái)說(shuō),學(xué)習(xí)NHibernate第一個(gè)障礙便是他的配置。確實(shí),相對(duì)于LINQ TO SQL或者是Entity FrameWork來(lái)說(shuō),他的配置太復(fù)雜了,各個(gè)實(shí)體類對(duì)應(yīng)的映射文件、以及NHibernate自身的配置等等,對(duì)象剛學(xué)習(xí)NHibernate的新手來(lái)說(shuō),確實(shí)是擺在他們面前的一道坎。那么NHibernate的配置到底應(yīng)該注意哪些問(wèn)題?又該如何去進(jìn)行配置呢?俗話說(shuō)“給人魚不如授人以漁”。下面我就說(shuō)說(shuō)自己在使用NHibernate配置的過(guò)程,以及在配置中出現(xiàn)問(wèn)題后,怎樣去解決這些問(wèn)題。
先介紹我使用的環(huán)境以及Nhibernate的版本。
????? 開發(fā)環(huán)境:VS2008 SP1、 NHibernate-2.1.2.GA-bin.
1、NHibernate如何配置
??? Nhibernate的配置,當(dāng)然可以手寫進(jìn)行配置的。但是在編寫映射文件的時(shí)候有沒(méi)有智能提示呢?答案是有的!那怎樣才能在VS中讓我們?cè)诰帉憽⑿薷挠成湮募臅r(shí)候出現(xiàn)智能提示呢。?在我學(xué)習(xí)NHibernate的博客(http://www.cnblogs.com/lyj/archive/2008/10/14/1310913.html)中,永哥(我的名字也有個(gè)永字,^_^)說(shuō)“在下載的NHibernate里找到configuration.xsd和nhibernate-mapping.xsd兩個(gè)文件(這個(gè)文件我們可以在src\NHibernate.Config.Templates文件夾下找到)并復(fù)制到X:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas目錄即可"。我剛開始以為是NHibernate小組在開發(fā)Nhibernate后將源代碼發(fā)布了(因?yàn)橛蠸RC,我想應(yīng)該是源代碼的文件夾吧!),里面有這兩個(gè)文件。后來(lái)我試著去找NHibernate的源碼,結(jié)果找到的都是別人用NHibernate開發(fā)取來(lái)的例子的源碼。因?yàn)槲揖蜎](méi)有找到,最后不得不放棄。我把下載到的NHibernate-2.1.2.GA-bin解壓后,在Required_Bins文件夾下nhibernate-mapping.xsd、nhibernate-configuration.xsd復(fù)制到C:\Program Files\Microsoft Visual Studio 9.0\Xml\Schemas下,試編寫映射文件,結(jié)果發(fā)現(xiàn)有了智能提示了。【注:我這里并不是他永哥說(shuō)錯(cuò)了,因?yàn)樗l(fā)表他那邊博文的時(shí)候是08年,現(xiàn)在都2010了,Nhibernate的版本是改了又改,文件名肯定也會(huì)發(fā)生變化。我用是的版本比他的新。我學(xué)習(xí)Nhibernate也是從永哥的博客開始的。另外謝謝永哥這么好的博文!】
2、NHibernate在我們項(xiàng)目中需要的程序集動(dòng)態(tài)庫(kù)如下:NHibernate.dll、NHibernate.ByteCode.Castle.dll、Antlr3.Runtime.dll、Iesi.Collections.dll、log4net.dll。另外:如果你的NHibernate的代理工廠配置為Castle【即對(duì)property name='proxyfactory.factory_class'的配置】,則還需要Castle.Core.dll、Castle.DynamicProxy2.dll。當(dāng)然若你配置的代理工廠類為L(zhǎng)inFu,則需要他所對(duì)應(yīng)的程序集文件。在NHibernate.dll2.0.1.4000不設(shè)置它也行。但是2.1.2下必須設(shè)置。說(shuō)明:設(shè)置它的作用就是我們需要在程序中用什么樣的方式實(shí)現(xiàn)延遲加載
3、映射文件的設(shè)置:所有實(shí)體類對(duì)應(yīng)的映射的XML文件應(yīng)該設(shè)置為“嵌入資源”。否則系統(tǒng)程序會(huì)異常。如:
??????
另外,對(duì)各個(gè)實(shí)體類的映射文件中的unsave-value的設(shè)置,具體請(qǐng)參見我的CSDN的博客(http://blog.csdn.net/tyb1222/archive/2010/09/22/5900923.aspx)我這里就不做說(shuō)明了。
4、NHibernate的配置文件的設(shè)置:在我們下載的NHibernate-2.1.2.GA-bin解壓后,會(huì)有一個(gè)Configuration_Templates文件夾。他里面存放的是Nhibernate所支持的各種數(shù)據(jù)庫(kù)的配置。選擇你用的數(shù)據(jù)庫(kù)類別,將相應(yīng)的xml文件拷貝到配置文件中。注意:在Configuration_Templates文件夾下的SQLSERVER數(shù)據(jù)庫(kù)的配置文件中,需添加對(duì)應(yīng)實(shí)體類的程序集的配置【如:mapping assembly="Model"】,否則會(huì)報(bào)如上3中所出現(xiàn)的異常。我覺(jué)得默認(rèn)的配置模板中就應(yīng)該加上對(duì)實(shí)體類所在程序集的配置,我們改相應(yīng)的程序集名稱就行了,但是在2.1.2.GA中卻并沒(méi)有這樣做。
5、注意你的映射文件中class 里屬性的配置,若配置不正確變回提示如下異常:
通常這樣的異常是由于系統(tǒng)找不到由映射文件制定的程序集而產(chǎn)生
6、NHibernate-2.1.2的配置與以前版本不一樣的地方:必須設(shè)置延遲加載的方式、Nhibernate的配置不必設(shè)置為"始終復(fù)制",默認(rèn)即可、所需的程序集文件比以前多【因?yàn)檠舆t加載現(xiàn)在必須設(shè)置,所以涉及的動(dòng)態(tài)庫(kù)文件也是必不可少的】
總結(jié):NHibernate-2.1.2配置需注意將映射文件設(shè)置為嵌入的資源、對(duì)從配置模板中拷貝過(guò)來(lái)的必須添加對(duì)實(shí)體類程序集配置以及我們需要的數(shù)據(jù)庫(kù)連接、如果我們是實(shí)體類的映射文件中不申明不使用延遲加載則對(duì)應(yīng)的實(shí)體類所有的屬性方法必須為virtual、NHibernate各個(gè)版本下所需要的其他庫(kù)文件必須與之配套使用,應(yīng)注意版本。
總結(jié)
以上是生活随笔為你收集整理的我的NHibernate之路(1)---基本配置篇的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 信息化应以电子商务为鉴——企业成长的经济
- 下一篇: 交易劫持、钓鱼网站、盗号***严重威胁网