NHibernate配置問題總結

來源:互聯網
上載者:User

  NHIbernate為一款優秀的ORM架構,它為我們開發基於關係型資料庫的系統提供的相當的便利性。網上關於它的介紹有很多(如http://www.cnblogs.com/lyj/archive/2008/10/30/1323099.html),我這裡就不在多說了。下面介紹我在用NHibernate中遇到的一些配置上的問題。

  我使用的NHibernate版本是NHibernate-2.1.2.GA-bin。以前的版本沒有用過,我覺得不同的版本下,NHibernate的配置是不一樣的。也許有人說版本都不一樣配置當然應該有區別了。但是我這裡想說的是不僅僅是設定檔上的區別,各個版本下的NHibernate需要的其他一些組件檔也是不一樣的(讓大俠見笑了,這個我以前真不知道,以為NHibernate版本升級更換一下新的NHibernate.dll就行了。)

  下面我做的事情就是要將在NHibernate2.0.1.4000版本下能正常啟動並執行程式換成2.1.2.4000遇到的一些問題。

  環境:VS2008 SP1, SQLSERVER EXPRESS2005

  NHibernate版本:NHibernate-2.1.2.GA

系統結構如下:

  

  首先我將BLL下的NHibernate檔案更換了。出現的第一個異常如下:

  

  但是我查看了程式的Bin目錄,發現是有Iesi.Collections.dll檔案的。再說在2.0.1.4000運行不是能正常運行嗎。?

  我查看了一下Iesi.Collections.dll的版本,發現時程式集的版本確實是不一樣。那麼難道是NHibernate版本不同,他需要的其他程式集的版本也不一樣嗎。帶著這個疑問,我用中繼語言反組譯碼工具(在vs2008的命令提示視窗中輸入ildasm即可以開啟工具)看了一下兩個版本下的NHibernate.dll,發現問題了。2.0.1.4000在IL DASM中顯示中繼資料資訊為如:

  

     而2.1.2.4000中的中繼資料資訊如下:

  

     從上面兩個圖中可以清楚的看出:在這兩個版本中所需要的Iesi中需要的版本是不一樣的。也就是說如果你在2.1.2.4000中使用另外的一個Iesi版本,程式在載入2.1.2.4000的NHIbernate.dll時候,由於所需的其他程式集的版本必須要一直,否則,程式在運行時候就會拋異常。

    在發現上面的問題後,我把NHibernate需要的其他動態庫檔案(如Iesi.Collections.dll檔案)添加到bin目錄中。

  我替換的時候,在我的NHibernate設定檔hibernate.cfg.xml檔案中都配置成”nhibernate-configuration-2.2“,這個不需要變化。(我有點不解,不同的版本下這個配置一樣也行。我覺得似乎一個應該是2.1一個應該是2.2,出現問題時,我以為是這個問題,結果發現不是這個造成的)。

    替換後程式運在運行中開啟每個會話的時(ISession session = cfg.BuildSessionFactory().OpenSession();)

程式依然報如下異常:

  

  由上述異常資訊可以得知是因為沒有配置造成的,所以應該在NHibernate.cfg.xml中添加對他的配置(2.0.1.4000中不需要對他進行配置)。配置如下:

  <property name='proxyfactory.factory_class'>NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>。

  添加完配置後,運行程式依然拋異常,如:

  

  根據異常的提示,我認為是缺少NHibernate.ByteCode.Castle.dll而導致程式載入出錯,於是我將NHibernate.ByteCode.Castle.dll添加到Bin目錄。繼續編譯後繼續運行程式,繼續拋異常,如:

  

  由於這個程式集和Castle有關,由此我不得不懷疑相關的Castle的相關的程式集也應該需要。添加進來以後。繼續運行程式,發現在使用HQL時候(IList<UserInfo> list = session.CreateQuery(" from UserInfo")),程式還是拋異常。如:

  

  於是,我又添加Antlr3.Runtime.dll檔案【當然得是上面異常中出現的版本】後,程式正常運行。

  總結:NHibernate-2.1.2.GA版本下,做ORM開發,需要的動態庫如下(以Castle而言):

  1、NHibernate.dll   2、Antlr3.Runtime.dll  3、Castle.Core.dll  4、Castle.DynamicProxy2.dll   5、Iesi.Collections.dll   6、NHibernate.ByteCode.Castle.dll

  7、log4net.dll

  NHibernate-3.0.0下配置依然需要上述7個庫檔案,只是版本不一樣罷了。  

  當然,如果使用的不是Castle,3、4就應該是相應的動態庫了!

   後記:NHibernate發展到今天【已經推出3.0版本】,依然有許許多多的追隨者,我想應該是有很多原因的。即是今天MS同樣推出了ORM技術LINQ、Entity FrameWork等等。我泛泛使用後覺得,Nhibernate的使用還是比他們都麻煩點,主要是配置方面。

  好了,就絮叨到這。希望對初學NHibernate的朋友有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.