NHibernate Step by Step (一) Hello,NHibernate!
好了,今天我們正式開始NHibernate的歷程,在第一次的練習中,我將盡量詳細地講解環境的配置,以后將不再詳細解釋。
基本的軟件環境如下:
1.NHibernate
www.nhibernate.org
當前版本是1.0.2
2.Code Smith
http://www.codesmithtools.com/
3.NHibernate模板
點擊這里下載
當然,少不了VS2005跟SQLServer了,我這里用的是SQLServer2005,教程用在SQLServer2000上應該沒有問題,默認情況下,我將建立并使用一個叫NHibernate的數據庫。
首先,我們先建立一個最簡單的Person表,如下完整腳本(你可以進行修改以適合自己的數據庫):




















僅有兩個字段,一個自動增長的id,一個name,如下:
然后將下載的nhibernate-template解壓,打開Code Smith,將模板加入”Template Explorer”,如下:
然后在其中的NHibernate.cst上點右鍵,選擇“Execute”,彈出設置窗口,在左邊的屬性窗口進行如下設置:
注 意:SourceDatabase屬性在第一次選擇時需要配置一個連接字符串,配置好后Code Smith將記錄下來。 Assembly屬性代表的是生成文件的默認Assembly名,而NameSpace,顧名思義,就是使用的命名空間了,這里我們全部使用” Test.Model”,請記住這個名字,點擊左下角的Generate,將會在指定的輸出目錄下產生兩個文件:Person.cs, Person.hbm.xml。
好了,NHibernate需要的類文件和映射文件生成完了,我們可以開始干活了!(生成NHibernate文件均是如此步驟,以后不再贅述)
新建立一個類庫工程,為了簡潔起見,我們命名為Model,需要注意的是,為了跟剛才生成的文件對應,我們需要在Model工程的屬性頁中將起Assembly名字設為上面的“Test.Model”,如下:
然 后將剛才生成的兩個文件Person.cs和Person.hbm.xml加入到Model工程中來,選中Person.hbm.xml文件,在屬性窗口 中將其“Build Action”設置為“Embedded Resource”(這是非常重要的一步,否則NHibernate將無法找到映射文件),如下:
build,ok,通過。
然后建立一個控制臺工程,命名為Console1,添加NHibernate和上面Model項目的引用,另外添加一個應用程序配置文件,如下:

















然后編寫如下代碼:




































運行,ok,執行成功!!
我們到數據庫檢查一下,如下:
我們想要添加的記錄已經成功加入到數據庫中!!
是不是感覺有些神奇啊?好,我們開始詳細解釋。
先來看生成的兩個文件,第一個是Person.cs,如下:








你可以發現,這完全是一個普通的poco類(Plain Old CLR Object),僅僅是對數據庫person表的一個完全映射,不依賴于任何框架,可以用來作為持久化類,你可以在任何地方使用而不用擔心依賴于某些神秘的運行時東西。
另 外,NHibernate需要知道怎樣去加載(load)和存儲(store)持久化類的對象。這正是NHibernate映射文件發揮作用的地方。映射 文件告訴NHibernate它應該訪問數據庫(database)里面的哪個表(table)及應該使用表里面的哪些字段(column),這就是我們 今天要講的重點了,Person.hbm.xml,如下:













不用說,最頂層的hibernate-mapping節點是NHibernate用來進行映射的根了,其中,包含一個class節點,里面的name屬性對應我們的Person類,注意,需要完整的限定名;而table屬性,則顯而易見是對應數據庫中的Person表了。
我 們再往里面看,分別有兩個節點,一個是id,對應數據庫中的id,一個是屬性name,對應表中的column name和Person類中的name屬性,整個映射文件簡捷明了,一看即知。實際上這是由代碼產生工具產生的映射文件,里面很多東西我們其實可以省略, 如下寫法:
<property name=”Name” column=”name” />
NHibernate將自動去匹配數據庫中的列而不需要我們來設置。
下面,我們來看一下應用程序配置文件中都記錄了那些東西,如下:
hibernate.connection.provider_class
定制IConnectionProvider的類型.
例 如:full.classname.of.ConnectionProvider (如果提供者創建在NHibernate中), 或者 full.classname.of.ConnectionProvider, assembly (如果使用一個自定義的IConnectionProvider接口的實現,它不屬于NHibernate)。
hibernate.connection.driver_class
定制IDriver的類型.
full.classname.of.Driver (如果驅動類創建在NHibernate中), 或者 full.classname.of.Driver, assembly (如果使用一個自定義IDriver接口的實現,它不屬于NHibernate)。
hibernate.connection.connection_string
用來獲得連接的連接字符串.
hibernate.connection.isolation
設置事務隔離級別. 請檢查 System.Data.IsolationLevel 來得到取值的具體意義并且查看數據庫文檔以確保級別是被支持的。
例如: Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified
hibernate.dialect
NHibernate方言(Dialect)的類名 - 可以讓NHibernate使用某些特定的數據庫平臺的特性
例如: full.classname.of.Dialect(如果方言創建在NHibernate中), 或者full.classname.of.Dialect, assembly (如果使用一個自定義的方言的實現,它不屬于NHibernate)。
接著,我們開始解釋代碼的執行,如下:




























現在有了一個基本的概念了吧??
好了,第一篇就講這么多,我們下次再接著練習。
Step by Step,顧名思義,是一步一步來的意思,整個教程我將貫徹這一理念,待此系列結束后,我們再就某些高級話題進行深入。
任何建議或者批評,請e: abluedog@163.com
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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