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