天天看點

[Nhibernate]體系結構

在項目中也有用到過nhibernate但對nhibernate的認識,也存留在會用的階段,從沒深入的學習過,決定對nhibernate做一個系統的學習。

對象-關系映射(object/relation mapping,簡稱orm),是随着面向對象的軟體開發方法發展而産生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系資料庫是企業級應用環境中永久存放資料的主流資料存儲系統。對象和關系資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關系資料。記憶體中的對象之間存在關聯和繼承關系,而在資料庫中,關系資料無法直接表達多對多關聯和繼承關系。是以,對象-關系映射(orm)系統一般以中間件的形式存在,主要實作程式對象到關系資料庫資料的映射。(百度百科)

nhibernate 是一個基于.net 的針對關系型資料庫的對象持久化類庫。nhibernate 來源于非常優秀的基于java的hibernate 關系型持久化工具。

nhibernate 從資料庫底層來持久化你的.net 對象到關系型資料庫。nhibernate 為你處理這些,遠勝于你不得不寫sql去從資料庫存取對象。你的代碼僅僅和對象關聯,nhibernat 自動産生sql語句,并確定對象送出到正确的表和字段中去。(百度百科)

[Nhibernate]體系結構

上圖展示了nhibernate使用資料庫和配置檔案資料來為應用程式提供持久化服務(和持久化對象)。

兩種體系

輕型體系,應用程式自己提供ado.net連接配接,并且自行管理事務。這種方式使用了nhibernate api的一個最小子集。

[Nhibernate]體系結構

全面解決體系,對于應用程式來說,所有的底層ado.net api都被抽象了,所有的細節都讓nhibernate來做。

[Nhibernate]體系結構

常用對象

sessionfactory(nhibernate.isessionfactory):對屬于單一資料庫的編譯過的映射嗯間的一個線程安全的,不可變的緩存快照。它是session的工廠,是connectioprovider的客戶。可以持有一個可選的(第二級)資料緩存,可以在程序級别或叢集級别儲存可以在事務中重用的資料。

會話session(nhibernate.isession):單線程,生命期短促的對象,代表應用程式和持久化層之間的一次對話。封裝了一個ado.net連接配接。也是transaction的工廠。儲存有必需的(第一級)持久化對象的緩存,用于周遊對象圖,或者通過辨別符查找對象。

持久化對象(persistent)及其集合(collection):生命期短促的單線程對象,包含了持久化狀态和商業功能。它們可能是普通的對象,唯一特别的是他們現在從屬于且僅從屬于一個session。一旦session被關閉,他們都将從session中取消聯系,可以在任何程式層自由使用(比如,直接作為傳送到表現層的dto,資料傳輸對象)。

臨時對象(transient object)及其集合(collection):目前沒有從屬于一個session的持久化類的執行個體。它們可能是剛剛被程式執行個體化,還沒來得及被持久化,或者是被一個已經關閉的session所執行個體化的。

事務transaction(nhibernate.itransaction):(可選)單線程,生命期短促的對象,應用程式用它來表示一批工作的原子操作。是底層的ado.net事務的抽象。一個session某些情況下可能跨越多個transaction事務。

connectionprovider(nhibernate.connectin.connectionprovider):(可選)ado.net連接配接的工廠,從底層的idbconnection抽象而來。對應用程式不可見,但可以被開發者擴充/實作。

transactionfactory(net.sf.hibernate.transactionfactory):(可選)事務執行個體的工廠,對應用程式不可見,但可以被開發者擴充/實作。

通過圖可以看出,輕型結構中沒有使用transaction/transactionfactory或connectionprovider api,直接和ado.net對話了。

學習orm和nhibernate概念,及nhibernate的結構。

參考

《nhibernate中文文檔》

部落格位址:

<a href="http://www.cnblogs.com/wolf-sun">http://www.cnblogs.com/wolf-sun/</a>

部落格版權:

本文以學習、研究和分享為主,歡迎轉載,但必須在文章頁面明顯位置給出原文連接配接。

如果文中有不妥或者錯誤的地方還望高手的你指出,以免誤人子弟。如果覺得本文對你有所幫助不如【推薦】一下!如果你有更好的建議,不如留言一起讨論,共同進步!

再次感謝您耐心的讀完本篇文章。

轉載:http://www.cnblogs.com/wolf-sun/p/3694592.html