01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一級緩衝

來源:互聯網
上載者:User

標籤:c   style   a   color   get   strong   

緩衝的範圍?

1.事務範圍 

   事務範圍的緩衝只能被當前事務訪問,每個事務都有各自的緩衝,緩衝內的資料通常採用相互關聯的對象形式.緩衝的生命週期依賴於事務的生命週期,只有當事務結束時,緩衝的生命週期才會結束.事務範圍的緩衝使用記憶體作為儲存介質,一級緩衝就屬於事務範圍.

2.應用範圍 

   應用程式的緩衝可以被應用範圍內的所有事務共用訪問.緩衝的生命週期依賴於應用的生命週期,只有當應用結束時,緩衝的生命週期才會結束.應用範圍的緩衝可以使用記憶體或硬碟作為儲存介質,二級緩衝就屬於應用範圍.

3.叢集範圍 

   在叢集環境中,緩衝被一個機器或多個機器的進程共用,緩衝中的資料被複製到叢集環境中的每個進程節點,進程間通過遠程通訊來保證緩衝中的資料的一致,緩衝中的資料通常採用對象的鬆散資料形式.

 

-------------------------------------------------------------------

Session緩衝就是一級緩衝.是事務範圍的緩衝

 

SessionFactory的緩衝分為內建緩衝和外置緩衝.內建緩衝中存放的是SessionFactory對象的一些集合屬性包含的資料(映射元素據及預定義SQL語句等),對於應用程式來說,它是唯讀.外置緩衝中存放的是資料庫資料的副本,其作用和一級緩衝類似.二級緩衝除了以記憶體作為儲存介質外,還可以選用硬碟等外部存放裝置

注意事項:

1.Session 層級的緩衝,它同session邦定。它的生命週期和session相同。Session消毀,它也同時消毀;管理一級緩衝,一級緩衝無法取消,用兩個方法管理,clear(),evict()

2.兩個session 不能共用一級緩衝,因它會伴隨session的生命週期的建立和消毀;

3.Session緩衝是實體層級的緩衝,就是只有在查詢對象層級的時候才使用,如果使用HQL和SQL是查詢屬性層級的,是不使用一級緩衝的!切記!!!!

4. 理解Get()和Load()在一級緩衝中的區別

  使用ISession.Get()方法立即把對象執行個體儲存到緩衝中,

     使用ISession.Load()方法僅僅先載入實體的Id。

                 當需要使用除了實體的Id以外的屬性的時候再訪問資料庫把這個執行個體儲存在緩衝中。

 

 -------------------------------------------------------------------------------------

NHibernate一級緩衝管理

NHibernate為我們預設提供了一級緩衝,那麼我們想顯式地去管理ISession緩衝,怎麼辦呢?ISession介面為我們提供了一些方法來顯式管理一級緩衝。

ISession.Evict(object):從該session緩衝中刪除指定執行個體。

ISession.Clear():清空該Session中所有緩衝。

ISession.Contains(object):檢查緩衝中是否包含指定執行個體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.