引言
在項目中也有用到過nhibernate但對nhibernate的認識,也存留在會用的階段,從沒深入的學習過,決定對nhibernate做一個系統的學習。
ORM
對象-關系映射(OBJECT/RELATION MAPPING,簡稱ORM),是隨着面向對象的軟件開發方法發展而產生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系數據庫是企業級應用環境中永久存放數據的主流數據存儲系統。對象和關系數據是業務實體的兩種表現形式,業務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在數據庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)系統一般以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。(百度百科)
NHibernate
NHibernate 是一個基於.Net 的針對關系型數據庫的對象持久化類庫。Nhibernate 來源於非常優秀的基於Java的Hibernate 關系型持久化工具。
NHibernate 從數據庫底層來持久化你的.Net 對象到關系型數據庫。NHibernate 為你處理這些,遠勝於你不得不寫SQL去從數據庫存取對象。你的代碼僅僅和對象關聯,NHibernat 自動產生SQL語句,並確保對象提交到正確的表和字段中去。(百度百科)
體系結構

上圖展示了Nhibernate使用數據庫和配置文件數據來為應用程序提供持久化服務(和持久化對象)。
兩種體系
輕型體系,應用程序自己提供ADO.NET連接,並且自行管理事務。這種方式使用了NHibernate API的一個最小子集。

全面解決體系,對於應用程序來說,所有的底層ADO.NET API都被抽象了,所有的細節都讓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中文文檔》
