NHibernate中的API
本篇文章介紹的是NHibernate的各種API及其作用。
下圖描述了NHibernate的API在分層架構中的作用,下面將進行詳細說明。
?
NHibernate的接口大致分為四類:
1.? 被應用程序調用進行基本數據操作(增、刪、改、查)的接口。這些接口是應用程序的業務邏輯層和控制層與NHibernate的主要交互點。ISession, ITransaction, IQuery和ICriteria屬于此類。
2. 被應用程序用來配置NHibernate的接口。Configuration就屬此類。
3. 回調接口。應用程序用回調接口來響應NHibernate中觸發的事件。這類接口包括Interceptor, ILifecycle和IValidatable等。
4. 用于擴展NHibernate的強大映射功能的接口。這類接口通常被應用程序的基礎架構來實現。IUserType, ICompositeUserType, 和IIdentifierGenerator屬于此類。
NHibernate充分利用.NET中已有的API, 包括ADO.NET和與之對應的ITransaction API,由于ADO.NET提供了針對不同數據庫的抽象功能,這就使NHibernate幾乎支持所有的數據庫。
下面詳細介紹NHibernate中的核心接口:
一、核心接口:
1. ISession.
???? ISession是NHibernate應用程序的主要接口,它提供NHibernate用于查詢,更新,存儲和刪除對象的方法。ISession是輕量級的對象,易于創建和銷毀。這一點很重要,因為在NHibernate應用程序中隨時都可能需要創建session, 也許每一次頁面請求都需要。需要注意的是,NHibernate session不是線程安全的,所以在設計的時候只能同時被一個線程使用。
??? NHibernate中session的含義介于傳統的connection和transaction之間,可以把它看做與一個工作單元相關的對象的緩存或集合,NHibernate能夠檢測到這個工作單元中對象的變化。有時,Isession也被稱作永久化管理器,因為它也是用于永久化操作的一個接口,比如存取對象。需要注意的是,NHibernate中的session和ASP.NET中的session沒有任何關系.
2. ISessionFactory.
????? 應用程序從ISessionFactory中獲取ISession, ISessionFactory不是輕量級的對象,它被用來在多個應用程序線程中共享。通常整個應用程序中只有一個ISessionFactory的實例, 比如可以在應用程序初始化的時候創建。但是如果你的應用程序需要使用NHibernate訪問多個數據庫,就需要為每一個數據庫創建一個ISessionFactory的實例。
????? ISessionFactory緩存了NHibernate運行過程中創建的SQL語句和其他的映射數據,它還可以放置一個工作單元中讀取并且下一次工作單元或者session中可能用到的數據。ISessionFactory也可以用來配置類和集合的映射來使用二級緩存。
3. Configuration接口。
Configuration類是用來配置NHibernate的。應用程序用Configuration的實例在ISessionFactory創建前配置映射文件的位置以及設置NHibernate特定的屬性。
雖然Configuration類在整個NHibernate應用程序中只占很小的一部分,但是它是我們開始用NHibernate時用到的第一個對象。
4. ITransaction接口。
這是一個可選接口,NHibernate應用程序可以不使用這個接口,而自己在基礎架構代碼中管理事務。NHibernate transaction從底層的事務(比如ADO.NET Transaction或者其他的Transaction)中抽象出來應用程序代碼,這樣應用程序代碼就可以通過一系列連貫的客戶端API來控制事務的邊界,從而使NHibernate應用程序可以在不同的執行環境和容易中實現可移植性。
5. IQuery和ICriteria接口。
?? IQuery接口提供了強大的數據庫查詢能力,同時可以控制查詢如何執行,是NHibernate獲取數據的基本接口。查詢寫成HQL或者數據庫原始的SQL語句。IQuery是輕量級的,只能在創建它的ISession內使用。它的作用是:綁定參數,限定查詢返回的結果條數,然后執行查詢。
?? ICriteria接口是一個與IQuery類似的接口,可以用來創建和執行面向對象的條件查詢。
二、回調接口。
當一個對象發生一個事件(比如這個對象被加載、存儲和刪除)時,回調接口可以讓應用程序收到一個通知。NHibernate應用程序并不需要實現這些事件,但是在執行一些通用的任務的時候它們很有用,比如創建審核記錄的時候。
ILifeCycle和IValidatable接口讓一個永久化對象能夠響應與它的永久化生命周期相關的事件。永久化生命周期包含在一個對象的CRUD操作中,也就是在這個對象被創建,提取,更新和刪除的時候。
(注意,NHibernate開發團隊當初受其他具有這些接口的ORM解決方案的影響,后來他們意識到讓永久化類實現這些NHibernate特定的接口會影響可移植性,所以這兩個接口已經過期。)
IInterceptor接口可以讓應用程序處理事件,同時又不必實現NHibernate特定的接口。IInterceptor接口的實現以參數的形式傳遞給永久化實例。
三、類型。
??? NHibernate種類型的概念在架構中是一個基本而有強大的元素。.NET的Type對象將.NET中的類型映射到數據庫的列類型(一個類型可能擴展到多個數據表列)。所有永久化類的永久化屬性,包括關聯在內,都有對應的NHibernate類型。這種設計讓NHibernate具有很強的靈活性和可擴展性,因為每一種關系型數據庫都有一套NHibernate類型對應。
?? NHibernate包含了豐富的類型,涵蓋了.NET基礎類和很多CLR的類,包括DateTime, System.Enum, byte[], 和Serializable 類對應的類型。
?? NHibernate還支持用戶自定義的類型。IUserType, ICompositeUserType和IParameterizedType這些接口就是用來給我們創建自己的類型用的,我們也可以用IUserCollectionType創建自己的集合類。NHibernate的這個特性,可以讓我們很方便而簡潔的處理應用程序中用到的類,比如Address,Name和MoneyAccount。自定義類型是NHibernate的一個核心屬性,NHibernate團隊鼓勵我們盡量多并且有創造性的使用它。
四、擴展接口
NHibernate提供的大部分功能都是可配置的,這就允許我們在一些內置策略之間進行選擇。當內置的策略足以滿足我們的需要時,NHibernate還允許我們通過實現一些接口來插入我們自己的功能實現。插入點包括:
1. 主鍵的生成(IIdentifierGenerator接口)
2. SQL語言的支持(Dialect抽象類)
3. 緩存策略(ICache和ICacheProvider接口)。
4. ADO.NET連接管理(IConnectionProvider接口)。
5. 事務管理(ITransactionFactory和ITransaction接口)。
6. ORM策略(IClassPersister接口層級)
7. 屬性訪問策略(IPropertyAccessor接口)。
8. 代理創建(IProxyFactory接口)。
對于上述接口,NHibernate已經帶了至少一種實現,所以,如果我們想擴展這些內置的功能,并不需要從頭開始。
轉載于:https://www.cnblogs.com/aaa6818162/p/4639308.html
總結
以上是生活随笔為你收集整理的NHibernate中的API的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Asp.Net Mvc - 在OnRes
- 下一篇: NYOJ6——喷水装置(一)