當(dāng)前位置:
首頁(yè) >
NHibernate重要概念的解释和说明
發(fā)布時(shí)間:2025/4/14
24
豆豆
生活随笔
收集整理的這篇文章主要介紹了
NHibernate重要概念的解释和说明
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
NHibernate
是一個(gè)面向.NET環(huán)境的對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射工具。
對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射(object/relational mapping (ORM))
這個(gè)術(shù)語(yǔ)表示一種技術(shù),用來(lái)把對(duì)象模型表示的對(duì)象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去。?
ISession
是一個(gè) 持久化管理器, 我們通過(guò)ISession來(lái)從數(shù)據(jù)庫(kù)中存取表。
ISessionFactory
代表一個(gè)數(shù)據(jù)庫(kù),并且使用一個(gè)XML配置文件(Web.config或者h(yuǎn)ibernate.cfg.xml)。?
Configuration實(shí)例
NHibernate通過(guò)對(duì)Configuration().Configure()的調(diào)用來(lái)裝載配置文件,并初始化成一個(gè)Configuration實(shí)例;通過(guò)Configuration實(shí)例創(chuàng)建一個(gè)ISessionFactory。
NHibernate體系結(jié)構(gòu)
NHibernate使用數(shù)據(jù)庫(kù)和配置信息來(lái)為應(yīng)用程序提供持久化服務(wù)(以及持久的對(duì)象)。
ITransaction (NHibernate.ITransaction)
(可選的)應(yīng)用程序用來(lái)指定原子操作單元范圍的對(duì)象,它是單線程的,生命周期很短。
IConnectionProvider (NHibernate.Connection.IConnectionProvider)
(可選的)生成ADO.NET連接以及Command對(duì)象的工廠。 它通過(guò)抽象將應(yīng)用從底層的IDbConnection或IDbCommand隔離開(kāi)。 僅供開(kāi)發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。?
IDriver (NHibernate.Driver.IDriver)
(可選的)一個(gè)封裝了不同ADO.NET providers之間的差異(利用參數(shù)命名轉(zhuǎn)換等ADO.NET支持的特性)的接口。?
ITransactionFactory (NHibernate.Transaction.ITransactionFactory)
(可選的)生成ITransaction對(duì)象實(shí)例的工廠。 僅供開(kāi)發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。?
實(shí)例狀態(tài)
一個(gè)持久化類的實(shí)例可能處于三種不同狀態(tài)中的某一種。 這三種狀態(tài)的定義則與所謂的持久化上下文(persistence context)有關(guān)。 NHibernate的ISession對(duì)象就是這個(gè)所謂的持久化上下文。?
瞬態(tài)(transient)
該實(shí)例從未與任何持久化上下文關(guān)聯(lián)過(guò)。它沒(méi)有持久化標(biāo)識(shí)(相當(dāng)于主鍵值)。?
持久化(persistent)
實(shí)例目前與某個(gè)持久化上下文有關(guān)聯(lián)。 它擁有持久化標(biāo)識(shí)(相當(dāng)于主鍵值),并且可能在數(shù)據(jù)庫(kù)中有一個(gè)對(duì)應(yīng)的行。 對(duì)于某一個(gè)特定的持久化上下文,NHibernate保證持久化標(biāo)識(shí)與CLR標(biāo)識(shí)(其值代表對(duì)象在內(nèi)存中的位置)等價(jià)。?
脫管(detached)
實(shí)例曾經(jīng)與某個(gè)持久化上下文發(fā)生過(guò)關(guān)聯(lián),不過(guò)那個(gè)上下文被關(guān)閉了, 或者這個(gè)實(shí)例是被序列化(serialize)到另外的進(jìn)程。 它擁有持久化標(biāo)識(shí),并且在數(shù)據(jù)庫(kù)中可能存在一個(gè)對(duì)應(yīng)的行。 對(duì)于脫管狀態(tài)的實(shí)例,NHibernate不保證任何持久化標(biāo)識(shí)和CLR標(biāo)識(shí)的關(guān)系。?
可編程的配置方式
一個(gè)NHibernate.Cfg.Configuration實(shí)例代表了一個(gè)應(yīng)用程序中.NET類型 到SQL數(shù)據(jù)庫(kù)映射的完整集合. Configuration被用來(lái)構(gòu)建一個(gè)(不可變的 (immutable)) ISessionFactory. 映射定義則由不同的XML映射定義文件編譯而來(lái)。
外連接抓取(Outer Join Fetching)
如果你的數(shù)據(jù)庫(kù)支持ANSI, Oracle或Sybase風(fēng)格的外連接, 外連接抓取通常能通過(guò)限制往返數(shù)據(jù)庫(kù)次數(shù) (更多的工作交由數(shù)據(jù)庫(kù)自己來(lái)完成)來(lái)提高效率.?
日志
NHibernate使用Apache log4net來(lái)為各種事件記錄日志。?
XML配置文件
在hibernate.cfg.xml文件中指定一套完整的配置.?
持久化類(Persistent Classes)
在應(yīng)用程序中,用來(lái)實(shí)現(xiàn)業(yè)務(wù)問(wèn)題實(shí)體的(如,在電子商務(wù)應(yīng)用程序中的Customer和Order) 類就是持久化類。
映射定義(Mapping declaration)
對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射是用一個(gè)XML文檔(XML document)來(lái)定義的。
composite-id 聯(lián)合ID
如果表使用聯(lián)合主鍵,你可以把類的多個(gè)屬性組合成為標(biāo)識(shí)符屬性。
鑒別器
在"一棵對(duì)象繼承樹(shù)對(duì)應(yīng)一個(gè)表"的策略中,<discriminator>元素是必需的, 它定義了表的鑒別器字段。
property
<property>元素為類定義了一個(gè)持久化類的屬性。?
連接(join)
使用 <join> 元素,可以將一個(gè)類的屬性映射到多張表中。 當(dāng)表之間存在一對(duì)一關(guān)系的時(shí)候使用。?
持久化集合類
NHibernate要求持久化集合值字段必須聲明為接口。
延遲加載
集合(不包括數(shù)組)是可以延遲初始化的,意思是僅僅當(dāng)應(yīng)用程序需要訪問(wèn)時(shí),才載入他們的值。
有序集合(Sorted collections)
NHibernate支持實(shí)現(xiàn)System.Collections.SortedList和Iesi.Collections.SortedSet 的集合。
雙向關(guān)聯(lián)(Bidirectional associations)
雙向關(guān)聯(lián)允許通過(guò)關(guān)聯(lián)的任一端訪問(wèn)另外一端。在NHibernate中, 支持兩種類型的雙向關(guān)聯(lián):?
一對(duì)多(one-to-many),多對(duì)多(many-to-many)
繼承映射(Inheritance Mappings)
NHibernate支持三種基本的繼承映射策略:?
每個(gè)類分層結(jié)構(gòu)一張表(table per class hierarchy)單表繼承?
每個(gè)子類一張表(table per subclass)類表繼承?
每個(gè)具體類一張表(table per concrete class)具體表繼承?
此外,NHibernate還支持第四種稍有不同的多態(tài)映射策略:?
隱式多態(tài)(implicit polymorphism)?
加載對(duì)象
如果你已知某個(gè)持久化實(shí)例的標(biāo)識(shí)符,ISession的Load()方法讓你取出它。
查詢
如果你不能確定你要尋找的對(duì)象的標(biāo)示符,請(qǐng)使用ISession的Find() 方法。
元數(shù)據(jù)API
NHibernate中有一個(gè)非常豐富的元級(jí)別(meta-level)的模型,含有所有的實(shí)體和值類型數(shù)據(jù)的元數(shù)據(jù)。
事務(wù)和并發(fā)
NHibernate本身并不是數(shù)據(jù)庫(kù),它只是一個(gè)輕量級(jí)的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)映射(object-relational)工具。 它的事務(wù)交由底層的數(shù)據(jù)庫(kù)連接管理,如果數(shù)據(jù)庫(kù)連接有分布式事務(wù)的支持, 那么在 ISession 中進(jìn)行的操作將是整個(gè)原子性分布式事務(wù)的一部分。NHibernate可以看作是添加了面向?qū)ο笳Z(yǔ)義的ADO.NET瘦適配器(thin adapter)。?
攔截器與事件
應(yīng)用程序能夠響應(yīng)NHibernate內(nèi)部產(chǎn)生的特定事件是非常有用的。這樣就允許實(shí)現(xiàn)某些通用的功能 以及允許對(duì)NHibernate功能進(jìn)行擴(kuò)展。?
HQL: NHibernate查詢語(yǔ)言
NHibernate配備了一種非常強(qiáng)大的查詢語(yǔ)言,這種語(yǔ)言看上去很像SQL。但是, HQL是非常有意識(shí)的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵?#xff0c;它可以理解如繼承、多態(tài) 和關(guān)聯(lián)之類的概念。
NHibernate 過(guò)濾器(filters)?
NHibernate 1.2新增了對(duì)某個(gè)類或者集合使用預(yù)先定義的過(guò)濾器條件(filter criteria)的功能。 過(guò)濾器條件相當(dāng)于定義一個(gè) 非常類似于類和各種集合上的“where”屬性的約束子句,但是過(guò)濾器條件可以帶參數(shù)。 應(yīng)用程序可以在運(yùn)行時(shí)決定是否啟用給定的過(guò)濾器,以及使用什么樣的參數(shù)值。 過(guò)濾器的用法很像數(shù)據(jù)庫(kù)視圖,只不過(guò)是在應(yīng)用程序中確定使用什么樣的參數(shù)的。
抓取策略
抓取策略(fetching strategy) 是指: 當(dāng)應(yīng)用程序需要在(NHibernate實(shí)體對(duì)象圖的)關(guān)聯(lián)關(guān)系間進(jìn)行導(dǎo)航的時(shí)候, NHibernate如何獲取關(guān)聯(lián)對(duì)象的策略。
工具箱
通過(guò)NHibernate項(xiàng)目中提供的幾個(gè)命令行代碼生成工具(他們也被當(dāng)作項(xiàng)目的一部分不斷得到維護(hù)),還有一些其他的第三方工具(MyGeneration, CodeSmith, ObjectMapper, AndroMDA)。?
NHibernate的主發(fā)行包中附帶了最重要的工具(甚至在NHibernate內(nèi)部也可以快速調(diào)用這個(gè)工具):?
從映射文件到DDL schema的生成器(也就是SchemaExport, hbm2ddl)?
NHibernate項(xiàng)目直接提供的其他工具在一個(gè)單獨(dú)的發(fā)行包中發(fā)布,NHibernateContrib。這個(gè)發(fā)行包包含了下列任務(wù)的工具:?
使用映射文件生成C#代碼的hbm2net。?
使用.NET的attributes生成映射文件的NHibernate.Mapping.Attributes, 或者 NHMA for short)。?
NHibernate第三方支持工具包括:?
CodeSmith, MyGeneration, 以及 ObjectMapper (利用已有數(shù)據(jù)庫(kù)結(jié)構(gòu)生成映射文件)?
AndroMDA (MDA (模型驅(qū)動(dòng)架構(gòu)) 利用UML以及他們的XML/XMI展示生成持久化類文件)
是一個(gè)面向.NET環(huán)境的對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射工具。
對(duì)象/關(guān)系數(shù)據(jù)庫(kù)映射(object/relational mapping (ORM))
這個(gè)術(shù)語(yǔ)表示一種技術(shù),用來(lái)把對(duì)象模型表示的對(duì)象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去。?
ISession
是一個(gè) 持久化管理器, 我們通過(guò)ISession來(lái)從數(shù)據(jù)庫(kù)中存取表。
ISessionFactory
代表一個(gè)數(shù)據(jù)庫(kù),并且使用一個(gè)XML配置文件(Web.config或者h(yuǎn)ibernate.cfg.xml)。?
Configuration實(shí)例
NHibernate通過(guò)對(duì)Configuration().Configure()的調(diào)用來(lái)裝載配置文件,并初始化成一個(gè)Configuration實(shí)例;通過(guò)Configuration實(shí)例創(chuàng)建一個(gè)ISessionFactory。
NHibernate體系結(jié)構(gòu)
NHibernate使用數(shù)據(jù)庫(kù)和配置信息來(lái)為應(yīng)用程序提供持久化服務(wù)(以及持久的對(duì)象)。
ITransaction (NHibernate.ITransaction)
(可選的)應(yīng)用程序用來(lái)指定原子操作單元范圍的對(duì)象,它是單線程的,生命周期很短。
IConnectionProvider (NHibernate.Connection.IConnectionProvider)
(可選的)生成ADO.NET連接以及Command對(duì)象的工廠。 它通過(guò)抽象將應(yīng)用從底層的IDbConnection或IDbCommand隔離開(kāi)。 僅供開(kāi)發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。?
IDriver (NHibernate.Driver.IDriver)
(可選的)一個(gè)封裝了不同ADO.NET providers之間的差異(利用參數(shù)命名轉(zhuǎn)換等ADO.NET支持的特性)的接口。?
ITransactionFactory (NHibernate.Transaction.ITransactionFactory)
(可選的)生成ITransaction對(duì)象實(shí)例的工廠。 僅供開(kāi)發(fā)者擴(kuò)展/實(shí)現(xiàn)用,并不暴露給應(yīng)用程序使用。?
實(shí)例狀態(tài)
一個(gè)持久化類的實(shí)例可能處于三種不同狀態(tài)中的某一種。 這三種狀態(tài)的定義則與所謂的持久化上下文(persistence context)有關(guān)。 NHibernate的ISession對(duì)象就是這個(gè)所謂的持久化上下文。?
瞬態(tài)(transient)
該實(shí)例從未與任何持久化上下文關(guān)聯(lián)過(guò)。它沒(méi)有持久化標(biāo)識(shí)(相當(dāng)于主鍵值)。?
持久化(persistent)
實(shí)例目前與某個(gè)持久化上下文有關(guān)聯(lián)。 它擁有持久化標(biāo)識(shí)(相當(dāng)于主鍵值),并且可能在數(shù)據(jù)庫(kù)中有一個(gè)對(duì)應(yīng)的行。 對(duì)于某一個(gè)特定的持久化上下文,NHibernate保證持久化標(biāo)識(shí)與CLR標(biāo)識(shí)(其值代表對(duì)象在內(nèi)存中的位置)等價(jià)。?
脫管(detached)
實(shí)例曾經(jīng)與某個(gè)持久化上下文發(fā)生過(guò)關(guān)聯(lián),不過(guò)那個(gè)上下文被關(guān)閉了, 或者這個(gè)實(shí)例是被序列化(serialize)到另外的進(jìn)程。 它擁有持久化標(biāo)識(shí),并且在數(shù)據(jù)庫(kù)中可能存在一個(gè)對(duì)應(yīng)的行。 對(duì)于脫管狀態(tài)的實(shí)例,NHibernate不保證任何持久化標(biāo)識(shí)和CLR標(biāo)識(shí)的關(guān)系。?
可編程的配置方式
一個(gè)NHibernate.Cfg.Configuration實(shí)例代表了一個(gè)應(yīng)用程序中.NET類型 到SQL數(shù)據(jù)庫(kù)映射的完整集合. Configuration被用來(lái)構(gòu)建一個(gè)(不可變的 (immutable)) ISessionFactory. 映射定義則由不同的XML映射定義文件編譯而來(lái)。
外連接抓取(Outer Join Fetching)
如果你的數(shù)據(jù)庫(kù)支持ANSI, Oracle或Sybase風(fēng)格的外連接, 外連接抓取通常能通過(guò)限制往返數(shù)據(jù)庫(kù)次數(shù) (更多的工作交由數(shù)據(jù)庫(kù)自己來(lái)完成)來(lái)提高效率.?
日志
NHibernate使用Apache log4net來(lái)為各種事件記錄日志。?
XML配置文件
在hibernate.cfg.xml文件中指定一套完整的配置.?
持久化類(Persistent Classes)
在應(yīng)用程序中,用來(lái)實(shí)現(xiàn)業(yè)務(wù)問(wèn)題實(shí)體的(如,在電子商務(wù)應(yīng)用程序中的Customer和Order) 類就是持久化類。
映射定義(Mapping declaration)
對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射是用一個(gè)XML文檔(XML document)來(lái)定義的。
composite-id 聯(lián)合ID
如果表使用聯(lián)合主鍵,你可以把類的多個(gè)屬性組合成為標(biāo)識(shí)符屬性。
鑒別器
在"一棵對(duì)象繼承樹(shù)對(duì)應(yīng)一個(gè)表"的策略中,<discriminator>元素是必需的, 它定義了表的鑒別器字段。
property
<property>元素為類定義了一個(gè)持久化類的屬性。?
連接(join)
使用 <join> 元素,可以將一個(gè)類的屬性映射到多張表中。 當(dāng)表之間存在一對(duì)一關(guān)系的時(shí)候使用。?
持久化集合類
NHibernate要求持久化集合值字段必須聲明為接口。
延遲加載
集合(不包括數(shù)組)是可以延遲初始化的,意思是僅僅當(dāng)應(yīng)用程序需要訪問(wèn)時(shí),才載入他們的值。
有序集合(Sorted collections)
NHibernate支持實(shí)現(xiàn)System.Collections.SortedList和Iesi.Collections.SortedSet 的集合。
雙向關(guān)聯(lián)(Bidirectional associations)
雙向關(guān)聯(lián)允許通過(guò)關(guān)聯(lián)的任一端訪問(wèn)另外一端。在NHibernate中, 支持兩種類型的雙向關(guān)聯(lián):?
一對(duì)多(one-to-many),多對(duì)多(many-to-many)
繼承映射(Inheritance Mappings)
NHibernate支持三種基本的繼承映射策略:?
每個(gè)類分層結(jié)構(gòu)一張表(table per class hierarchy)單表繼承?
每個(gè)子類一張表(table per subclass)類表繼承?
每個(gè)具體類一張表(table per concrete class)具體表繼承?
此外,NHibernate還支持第四種稍有不同的多態(tài)映射策略:?
隱式多態(tài)(implicit polymorphism)?
加載對(duì)象
如果你已知某個(gè)持久化實(shí)例的標(biāo)識(shí)符,ISession的Load()方法讓你取出它。
查詢
如果你不能確定你要尋找的對(duì)象的標(biāo)示符,請(qǐng)使用ISession的Find() 方法。
元數(shù)據(jù)API
NHibernate中有一個(gè)非常豐富的元級(jí)別(meta-level)的模型,含有所有的實(shí)體和值類型數(shù)據(jù)的元數(shù)據(jù)。
事務(wù)和并發(fā)
NHibernate本身并不是數(shù)據(jù)庫(kù),它只是一個(gè)輕量級(jí)的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)映射(object-relational)工具。 它的事務(wù)交由底層的數(shù)據(jù)庫(kù)連接管理,如果數(shù)據(jù)庫(kù)連接有分布式事務(wù)的支持, 那么在 ISession 中進(jìn)行的操作將是整個(gè)原子性分布式事務(wù)的一部分。NHibernate可以看作是添加了面向?qū)ο笳Z(yǔ)義的ADO.NET瘦適配器(thin adapter)。?
攔截器與事件
應(yīng)用程序能夠響應(yīng)NHibernate內(nèi)部產(chǎn)生的特定事件是非常有用的。這樣就允許實(shí)現(xiàn)某些通用的功能 以及允許對(duì)NHibernate功能進(jìn)行擴(kuò)展。?
HQL: NHibernate查詢語(yǔ)言
NHibernate配備了一種非常強(qiáng)大的查詢語(yǔ)言,這種語(yǔ)言看上去很像SQL。但是, HQL是非常有意識(shí)的被設(shè)計(jì)為完全面向?qū)ο蟮牟樵?#xff0c;它可以理解如繼承、多態(tài) 和關(guān)聯(lián)之類的概念。
NHibernate 過(guò)濾器(filters)?
NHibernate 1.2新增了對(duì)某個(gè)類或者集合使用預(yù)先定義的過(guò)濾器條件(filter criteria)的功能。 過(guò)濾器條件相當(dāng)于定義一個(gè) 非常類似于類和各種集合上的“where”屬性的約束子句,但是過(guò)濾器條件可以帶參數(shù)。 應(yīng)用程序可以在運(yùn)行時(shí)決定是否啟用給定的過(guò)濾器,以及使用什么樣的參數(shù)值。 過(guò)濾器的用法很像數(shù)據(jù)庫(kù)視圖,只不過(guò)是在應(yīng)用程序中確定使用什么樣的參數(shù)的。
抓取策略
抓取策略(fetching strategy) 是指: 當(dāng)應(yīng)用程序需要在(NHibernate實(shí)體對(duì)象圖的)關(guān)聯(lián)關(guān)系間進(jìn)行導(dǎo)航的時(shí)候, NHibernate如何獲取關(guān)聯(lián)對(duì)象的策略。
工具箱
通過(guò)NHibernate項(xiàng)目中提供的幾個(gè)命令行代碼生成工具(他們也被當(dāng)作項(xiàng)目的一部分不斷得到維護(hù)),還有一些其他的第三方工具(MyGeneration, CodeSmith, ObjectMapper, AndroMDA)。?
NHibernate的主發(fā)行包中附帶了最重要的工具(甚至在NHibernate內(nèi)部也可以快速調(diào)用這個(gè)工具):?
從映射文件到DDL schema的生成器(也就是SchemaExport, hbm2ddl)?
NHibernate項(xiàng)目直接提供的其他工具在一個(gè)單獨(dú)的發(fā)行包中發(fā)布,NHibernateContrib。這個(gè)發(fā)行包包含了下列任務(wù)的工具:?
使用映射文件生成C#代碼的hbm2net。?
使用.NET的attributes生成映射文件的NHibernate.Mapping.Attributes, 或者 NHMA for short)。?
NHibernate第三方支持工具包括:?
CodeSmith, MyGeneration, 以及 ObjectMapper (利用已有數(shù)據(jù)庫(kù)結(jié)構(gòu)生成映射文件)?
AndroMDA (MDA (模型驅(qū)動(dòng)架構(gòu)) 利用UML以及他們的XML/XMI展示生成持久化類文件)
總結(jié)
以上是生活随笔為你收集整理的NHibernate重要概念的解释和说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WPF代码模板-布局部分
- 下一篇: 图解NHibernate项目框架